Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/avitex/typed-struct-cast
Casting plugin for TypedStruct
https://github.com/avitex/typed-struct-cast
elixir-lang typed-struct
Last synced: about 1 month ago
JSON representation
Casting plugin for TypedStruct
- Host: GitHub
- URL: https://github.com/avitex/typed-struct-cast
- Owner: avitex
- License: mit
- Created: 2019-08-08T02:23:05.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2021-04-29T21:25:08.000Z (over 3 years ago)
- Last Synced: 2024-04-20T08:51:33.486Z (8 months ago)
- Topics: elixir-lang, typed-struct
- Language: Elixir
- Size: 15.6 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![Build Status](https://travis-ci.com/avitex/typed-struct-cast.svg?branch=master)](https://travis-ci.com/avitex/typed-struct-cast)
# TypedStruct.Cast
**Casting plugin for [TypedStruct](https://hex.pm/packages/typed_struct)**
## TODO
- Documentation
- Finish primitive casting
- Remove requirement on development version of `typed_struct` that supports plugins.## Installation
Add `typed_struct_cast` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[
# NOTE: Currently not published on hex
# {:typed_struct_cast, "~> 0.1.0"}
{:typed_struct_cast, github: "avitex/typed-struct-cast"}
]
end
```## Usage
```elixir
defmodule MyCustomType do
@behaviour TypedStruct.Cast.Type@impl true
def cast(_value, _opts) do
{:ok, :custom}
end
enddefmodule MyStruct do
use TypedStruct
use TypedStruct.Cast # optionaltypedstruct do
plugin TypedStruct.Cast.Pluginfield :foo, integer(), cast: Integer
field :bar, MyCustomType.t(), cast: {MyCustomType, [foo: true]}
end
end# Create a new struct given a map
iex> MyStruct.cast(%{"foo" => "1"})
{:ok, %MyStruct{foo: 1, bar: nil}}# Create a new struct given a keyword
iex> MyStruct.cast([foo: "1", bar: true])
{:ok, %MyStruct{foo: 1, bar: :custom}}# Cast params into an existing struct
iex> MyStruct.cast(%MyStruct{bar: :hello}, {"foo" => "1"})
{:ok, %MyStruct{foo: 1, bar: :hello}}# If you don't `use TypedStruct.Cast`, you can access
# the same functions like so:
iex> TypedStruct.Cast.cast(MyStruct, %{"foo" => "1"})
{:ok, %MyStruct{foo: 1, bar: nil}}
```