defmodule Supabase.Storage.ObjectOptions do
@moduledoc """
Represents the configurable options for an Object within Supabase Storage.
This module encapsulates options that can be set or modified for a storage object. These options help in controlling behavior such as caching, content type, and whether to upsert an object.
## Structure
An `ObjectOptions` consists of the following attributes:
- `cache_control`: Specifies directives for caching mechanisms in both requests and responses. Default is `"3600"`.
- `content_type`: Specifies the media type of the resource or data. Default is `"text/plain;charset=UTF-8"`.
- `upsert`: A boolean that, when set to `true`, will insert the object if it does not exist, or update it if it does. Default is `true`.
## Functions
- `parse!/1`: Accepts a map of attributes and constructs a structured `ObjectOptions`.
## Examples
### Parsing object options
options_attrs = %{
cache_control: "no-cache",
content_type: "application/json",
upsert: false
}
Supabase.Storage.ObjectOptions.parse!(options_attrs)
"""
use Ecto.Schema
import Ecto.Changeset, only: [cast: 3, apply_action!: 2]
@type t :: %__MODULE__{
cache_control: String.t(),
content_type: String.t(),
upsert: boolean()
}
@fields ~w(cache_control content_type upsert)a
@derive Jason.Encoder
@primary_key false
embedded_schema do
field(:cache_control, :string, default: "3600")
field(:content_type, :string, default: "text/plain;charset=UTF-8")
field(:upsert, :boolean, default: true)
end
@spec parse!(map) :: t
def parse!(attrs) do
%__MODULE__{}
|> cast(attrs, @fields)
|> apply_action!(:parse)
end
end