GetReader gets the reader of this entry
(ctx context.Context, start, size int64)
| 271 | |
| 272 | // GetReader gets the reader of this entry |
| 273 | func (se *scriptDriveEntry) GetReader(ctx context.Context, start, size int64) (io.ReadCloser, error) { |
| 274 | vm, e := se.d.pool.Get(ctx) |
| 275 | if e != nil { |
| 276 | return nil, e |
| 277 | } |
| 278 | defer func() { _ = se.d.pool.Return(context.Background(), vm) }() |
| 279 | v, e := se.d.call(ctx, vm, "getReader", s.NewContext(vm, ctx), se.s, start, size) |
| 280 | if e != nil { |
| 281 | return nil, e |
| 282 | } |
| 283 | raw := v.Raw() |
| 284 | // Detach the reader from the VM so it is not closed when the VM is returned |
| 285 | // to the pool below; the caller owns closing the returned ReadCloser. |
| 286 | if rc := s.DetachReadCloser(vm, raw); rc != nil { |
| 287 | return rc, nil |
| 288 | } |
| 289 | // Fallback for non-closable (e.g. in-memory) readers. |
| 290 | reader := s.GetReader(raw) |
| 291 | if reader == nil { |
| 292 | panic("invalid returned value from getReader") |
| 293 | } |
| 294 | return wrapReader(reader), nil |
| 295 | } |
| 296 | |
| 297 | func (se *scriptDriveEntry) GetURL(ctx context.Context) (*types.ContentURL, error) { |
| 298 | vm, e := se.d.pool.Get(ctx) |