@type field() :: %{ type: field_type(), name: atom(), label: String.t(), value: (term() -> term()), link: (term() -> term()) | nil, referenced_resource_id: any() }
@type field_type() :: :text | :date | :number | :boolean | :reference | :link
@spec boolean_field( atom(), keyword() ) :: field()
@spec date_field( atom(), keyword() ) :: field()
@spec field(atom(), field_type(), keyword()) :: field()
@spec link_field( atom(), keyword() ) :: field()
@spec number_field( atom(), keyword() ) :: field()
@spec reference_field( atom(), [atom()], keyword() ) :: field()
@spec text_field( atom(), keyword() ) :: field()