Current section
Files
Jump to
Current section
Files
lib/file_stream/resource.ex
defprotocol FileStream.Resource do
@moduledoc """
A protocol to stream a file-like resource.
"""
@typedoc """
A streamable resource.
"""
@type t :: term()
@doc """
Returns a `FileStream` for the given resource.
"""
@spec stream!(t(), keyword()) :: FileStream.t()
def stream!(resource, opts)
end
defimpl FileStream.Resource, for: BitString do
@moduledoc false
@spec stream!(String.t(), keyword()) :: FileStream.t()
def stream!(string, opts) do
string
|> URI.parse()
|> FileStream.stream!(opts)
end
end
defimpl FileStream.Resource, for: URI do
@moduledoc false
@spec stream!(URI.t(), keyword()) :: FileStream.t()
def stream!(uri, opts) do
storage = FileStream.Storage.from_uri!(uri)
config = storage.init(opts)
%FileStream{uri: uri, storage: storage, config: config}
end
end