Filesystem behaviour used by the resolver.
@callback exists?(Path.t()) :: boolean()
@callback read(Path.t()) :: {:ok, binary()} | {:error, term()}
@spec exists?(Path.t()) :: boolean()
@spec read(Path.t()) :: {:ok, binary()} | {:error, term()}