An open API service indexing awesome lists of open source software.

https://github.com/gridpoint-com/ostara

🐇 Transform Ecto schemas into JSON Schemas
https://github.com/gridpoint-com/ostara

ecto elixir json-schema

Last synced: 4 months ago
JSON representation

🐇 Transform Ecto schemas into JSON Schemas

Awesome Lists containing this project

README

          

# Ostara

[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg)][Contributor Covenant]

Transforms [Ecto] schema modules into [JSON Schema] structures.

Ostara by Johannes Gehrts

[Ostara _(1901) by Johannes Gehrts_][art]

**Note:** Ostara is under active development and does not yet support all features of Ecto or the full JSON Schema specification. Contributions are welcome!

## Example

Given the following schema module:

```elixir
defmodule Product do
@moduledoc "A product from Acme's catalog"
use Ecto.Schema

@primary_key false

embedded_schema do
field :product_name, :string
field :price, :float
end

def changeset(data, params) do
data
|> cast(params, [:product_name, :price])
|> validate_required([:product_name])
|> validate_number(:price, greater_than: 0)
end
end
```

Ostara will produce the following JSON data:

```elixir
%{
"$schema" => "https://json-schema.org/draft/2020-12/schema",
"$id" => "product",
"title" => "Product",
"type" => "object",
"description" => "A product from Acme's catalog",
"properties" => %{
"product_name" => %{
"type" => "string"
},
"price" => %{
"type" => "number",
"exclusiveMinimum" => 0
}
},
"required" => ["product_name"]
}
```

## Installation

Ostara is [available in Hex] and can be installed by adding `ostara` to your list of dependencies in `mix.exs`:

```elixir
def deps do
[
{:ostara, "~> 0.4.0"}
]
end
```

## License

Ostara source code is released under Apache License 2.0. See
[LICENSE][LICENSE] for more information.

[Contributor Covenant]: https://github.com/gridpoint-com/ostara/blob/main/CODE_OF_CONDUCT.md
[Ecto]: https://hexdocs.pm/ecto/Ecto.html
[JSON Schema]: https://json-schema.org/
[LICENSE]: https://github.com/gridpoint-com/ostara/blob/main/LICENSE
[art]: https://commons.wikimedia.org/wiki/File:Ostara_by_Johannes_Gehrts.jpg
[available in Hex]: https://hex.pm/ostara