Packages
forge_sdk
0.32.2
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.7
1.0.6
1.0.4
1.0.4-p1
1.0.4-p0
1.0.3
1.0.2
1.0.2-p1
1.0.1
1.0.1-p1
1.0.0
0.40.6
0.40.5
0.40.4
0.40.3
0.40.2
0.40.1
0.40.0
0.39.1
0.39.0
0.38.6
0.38.5
0.38.4
0.38.3
0.38.2
0.38.1
0.38.0
0.37.5
0.37.4
0.37.3
0.37.2
0.37.1
0.37.0
0.34.0
0.33.2
0.33.1
0.33.0
0.32.2
0.32.1
0.32.0
0.31.1
0.31.0
0.30.0
0.29.1
0.29.0
0.28.3
0.28.2
0.28.1
0.28.0
0.27.4
0.27.3
0.27.2
0.27.1
0.27.0
0.26.6
0.26.5
0.26.4
0.26.3
0.26.1
0.26.0
Elixir / Erlang version of the SDK for Forge framework.
Current section
Files
Jump to
Current section
Files
lib/forge_sdk/file.ex
defmodule ForgeSdk.File do
@moduledoc """
Convenience functions for file api.
"""
alias ForgeAbi.{RequestLoadFile, RequestStoreFile}
alias ForgeSdk.Rpc
alias GRPC.Channel
@chunk_size 1400
@doc """
Chunk the file and delegate the rest to Rpc.store_file/2.
"""
@spec store_file(
Enumerable.t()
| RequestStoreFile.t()
| [RequestStoreFile.t()]
| Keyword.t()
| [Keyword.t()],
Channel.t() | nil
) :: String.t() | {:error, term()}
def store_file([path: path], chan) do
path
|> File.stream!([], @chunk_size)
|> Stream.map(&[chunk: &1])
|> store_file(chan)
end
def store_file(request, chan) do
Rpc.store_file(request, chan)
end
@doc """
"""
@spec load_file(RequestLoadFile.t() | Keyword.t(), Channel.t() | nil) ::
binary() | {:error, term()}
def load_file(request, chan) do
case Rpc.load_file(request, chan) do
{:error, reason} -> {:error, reason}
[error: reason] -> {:error, reason}
data when is_list(data) -> Enum.reduce(data, <<>>, &<<&2::binary, &1::binary>>)
end
end
end