Protocol to support Typst code syntax.
Summary
Functions
Encode Elixir data structures into Typst code syntax.
Types
@type t() :: term()
All the types that implement this protocol.
Functions
Encode Elixir data structures into Typst code syntax.
Examples
iex> AshTypst.Code.encode(~U[2015-01-13 13:00:07Z], %{timezone: "America/New_York"})
"datetime(year: 2015, month: 1, day: 13, hour: 8, minute: 0, second: 7)"
iex> AshTypst.Code.encode(nil, %{})
"none"
iex> AshTypst.Code.encode(%{true: true, false: false, other: :other}, %{})
"(\"false\": false, \"true\": true, \"other\": \"other\")"
iex> AshTypst.Code.encode(["one", 2, 3.0], %{})
"(\"one\", int(2), float(3.0))"The following types are supported by default:
Map->dictionaryList->arrayDecimal->decimalDateTime->datetimeNaiveDateTime->datetimeDate->datetimeTime->datetimeInteger->intFloat->floatString->strAtomconverts one of several Typst types:Ash.Resource(public fields) ->dictionaryAsh.NotLoaded->noneAsh.CiString->str
Context must be passed through. This allows for things like dates to be formatted according to a given timezone, etc.
If timezone is specified in the context, supported types will be automatically shifted to that zone. Ensure you install and configure your choice of timezone database in config.exs:
config :elixir, :time_zone_database, Tzdata.TimeZoneDatabase
config :elixir, :time_zone_database, TimeZoneInfo.TimeZoneDatabase
config :elixir, :time_zone_database, Zoneinfo.TimeZoneDatabase
config :elixir, :time_zone_database, Tz.TimeZoneDatabase