defmodule AshThrift.Conversion do
@spec type(atom()) :: String.t()
def type(type)
def type(Ash.Type.Atom), do: "string"
def type(Ash.Type.String), do: "string"
def type(Ash.Type.Integer), do: "i64"
def type(Ash.Type.Float), do: "double"
def type(Ash.Type.UtcDatetime), do: "i64"
def type(Ash.Type.UtcDatetimeUsec), do: "i64"
def type(Ash.Type.Boolean), do: "bool"
def type(Ash.Type.UUID), do: "binary"
def type(Ash.Type.Binary), do: "binary"
def type(_), do: raise("unsupported type")
@spec value(atom(), any()) :: any()
def value(type, value)
def value(_, nil), do: nil
def value(Ash.Type.Atom, v), do: Atom.to_string(v)
def value(Ash.Type.String, v), do: v
def value(Ash.Type.Integer, v), do: v
def value(Ash.Type.Float, v), do: v
def value(Ash.Type.UtcDatetime, v), do: DateTime.to_unix(v, :second)
def value(Ash.Type.UtcDatetimeUsec, v), do: DateTime.to_unix(v, :microsecond)
def value(Ash.Type.Boolean, v), do: v
def value(Ash.Type.UUID, v), do: Ecto.UUID.dump!(v)
def value(Ash.Type.Binary, v), do: v
def value(_, _), do: raise("unsupported type")
@spec parse(atom(), any()) :: any()
def parse(type, thrift_value)
def parse(_, nil), do: nil
def parse(Ash.Type.Atom, v), do: :"#{v}"
def parse(Ash.Type.String, v), do: v
def parse(Ash.Type.Integer, v), do: v
def parse(Ash.Type.Float, v), do: v
def parse(Ash.Type.UtcDatetime, v), do: DateTime.from_unix!(v, :second)
def parse(Ash.Type.UtcDatetimeUsec, v), do: DateTime.from_unix!(v, :microsecond)
def parse(Ash.Type.Boolean, v), do: v
def parse(Ash.Type.UUID, v), do: Ecto.UUID.cast!(v)
def parse(Ash.Type.Binary, v), do: v
def parse(_, _), do: raise("unsupported type")
end