TypedStructEctoChangeset

A plugin to enable basic "embeds" Ecto.cast support to the module created by the containing TypedStruct macro.

example

Example

If this module is defined:

  defmodule TypedStructModule do
    use TypedStruct

    typedstruct do
      plugin TypedStructEctoChangeset

      field :age, integer()
      field :name, String.t()
    end
  end

Then we can:

  iex> Ecto.Changeset.cast(%TypedStructModule{}, %{"age" => 23, "name" => "John Doe"}, [:age, :name])
  %Ecto.Changeset{}

limitations

Limitations

More database-centric fields such as assoc are not yet supported

example-use-cases-of-this-plugin

Example use cases of this plugin

  • typed_struct_ctor – Adds validating (new and from) constructor functions.

    Try the macro out in real time without having to install or write any of your own code.
    All you need is a running instance of Livebook

    Run in Livebook

installation

Installation

Because this plugin supports the interface defined by the TypedStruct macro, installation assumes you've already added that dependency.

While you can use the original typed_struct library, it seems to no longer be maintained. However, there is a fork here that is quite active.

If available in Hex, the package can be installed by adding typed_struct_ecto_changeset to your list of dependencies in mix.exs:

def deps do
  [
    # Choose either of the following `TypedStruct` libraries
    # The original TypedStruct library
    {:typed_struct, "~> 0.3.0"},
      
    # Or the newer forked TypedStruct library
    {:typedstruct, "~> 0.5.2"},

    # And add this library  
    {:typed_struct_ecto_changeset, "~> 1.0.0"}
  ]
end

Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/typed_struct_ecto_changeset.