View Source Ash.Type.File (ash v3.4.1)
A type that represents a file on the filesystem.
Persistence
This type does not support persisting via
Ash.DataLayer
.It is mainly intended to be used in arguments.
Valid values to cast
This type can cast multiple types of values:
- itself
Plug.Upload
- Any value that implements the
Ash.Type.File.Source
protocol.
Summary
Functions
Create a file from an IO.device()
Create a file from a path.
Open the file with the given modes
.
Returns the path to the file.
Types
@type t() :: %Ash.Type.File{ implementation: Ash.Type.File.Implementation.t(), source: Ash.Type.File.Implementation.source() }
Functions
Create a file from an IO.device()
Example
iex> path = "README.md"
...> {:ok, device} = File.open(path)
...> Ash.Type.File.from_io(device)
%Ash.Type.File{source: device, implementation: Ash.Type.File.IO}
Create a file from a path.
Example
iex> path = "README.md"
...> Ash.Type.File.from_path(path)
%Ash.Type.File{source: "README.md", implementation: Ash.Type.File.Path}
@spec open(file :: t(), modes :: [File.mode()]) :: {:ok, IO.device()} | {:error, Ash.Type.File.Implementation.error()}
Open the file with the given modes
.
This function will delegate to the open/2
function on the implementation
.
For details on the modes
argument, see the File.open/2
documentation.
Example
iex> path = "README.md"
...> file = Ash.Type.File.from_path(path)
...> Ash.Type.File.open(file, [:read])
...> # => {:ok, #PID<0.109.0>}
@spec path(file :: t()) :: {:ok, Path.t()} | {:error, :not_supported | Ash.Type.File.Implementation.error()}
Returns the path to the file.
Not every implementation will support this operation. If the implementation
does not support this operation, then {:error, :not_supported}
will be
returned. In this case, use the open/2
function to access the file.
Example
iex> path = "README.md"
...> file = Ash.Type.File.from_path(path)
...> Ash.Type.File.path(file)
{:ok, "README.md"}