Packages
metastatic
0.13.2
0.26.0
0.25.0
0.24.1
0.24.0
0.23.0
0.22.2
0.22.1
0.22.0
0.21.3
0.21.2
0.21.1
0.21.0
0.20.3
0.20.2
0.20.1
0.20.0
0.19.0
0.18.0
0.17.0
0.16.0
0.15.1
0.15.0
0.14.2
0.14.1
0.14.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.0
0.11.0
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.2
0.9.1
0.9.0
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.2
0.4.1
0.4.0
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.0
0.1.3
0.1.2
0.1.1
0.1.0
Cross-language code meta-model library using unified MetaAST representation. Parse, transform, and translate code across Python, Elixir, Ruby, Erlang, Haskell, and more via a shared three-tuple AST format.
Current section
Files
Jump to
Current section
Files
lib/metastatic/supplemental/info.ex
defmodule Metastatic.Supplemental.Info do
@moduledoc """
Metadata structure for supplemental modules.
Contains information about a supplemental module's capabilities,
dependencies, and target language.
## Fields
- `:name` - Unique atom identifier for this supplemental (e.g., `:pykka_actor`)
- `:language` - Target language atom (e.g., `:python`, `:javascript`)
- `:constructs` - List of MetaAST construct atoms this supplemental handles
- `:requires` - List of external library dependencies with version constraints
- `:description` - Human-readable description string
## Example
%Info{
name: :pykka_actor,
language: :python,
constructs: [:actor_call, :actor_cast, :spawn_actor],
requires: ["pykka >= 3.0"],
description: "Actor model support for Python via Pykka library"
}
"""
@enforce_keys [:name, :language, :constructs, :description]
defstruct name: nil,
language: nil,
constructs: [],
requires: [],
description: nil
@type t :: %__MODULE__{
name: atom(),
language: atom(),
constructs: [atom()],
requires: [String.t()],
description: String.t()
}
@doc """
Validates that an Info struct has all required fields properly set.
## Examples
iex> info = %Info{
...> name: :test,
...> language: :python,
...> constructs: [:actor_call],
...> description: "Test"
...> }
iex> Info.valid?(info)
true
iex> Info.valid?(%Info{name: nil, language: :python, constructs: [], description: "Test"})
false
"""
@spec valid?(t()) :: boolean()
def valid?(%__MODULE__{
name: name,
language: language,
constructs: [_ | _],
description: <<_::utf8, _::binary>>
})
when is_atom(name) and not is_nil(name) and is_atom(language) and not is_nil(language),
do: true
def valid?(_), do: false
end