Current section

Files

Jump to
diffo_example lib access services characteristic_values circuit.ex
Raw

lib/access/services/characteristic_values/circuit.ex

# SPDX-FileCopyrightText: 2025 diffo_example contributors <https://github.com/diffo-dev/diffo_example/graphs.contributors>
#
# SPDX-License-Identifier: MIT
defmodule DiffoExample.Access.Circuit do
@moduledoc """
Diffo - TMF Service and Resource Management with a difference
Circuit - AshTyped Struct for Circuit Characteristic Value
"""
use Ash.TypedStruct, extensions: [AshJason.TypedStruct, AshOutstanding.TypedStruct]
alias DiffoExample.Access.BandwidthProfile
jason do
pick [:circuit_id, :cvlan_id, :vci, :encapsulation, :bandwidth_profile]
compact(true)
end
outstanding do
expect [:circuit_id]
end
typed_struct do
field :circuit_id, :string,
constraints: [match: ~r/Q[A-Z]{4}\d{4} eth \d{1,4}:\d{1,4}/],
description: "the circuit id"
field :cvlan_id, :integer,
default: 0,
constraints: [min: 0, max: 4095],
description: "the circuit cvlan id"
field :vci, :integer,
default: 0,
constraints: [min: 0, max: 4095],
description: "the circuit vci"
field :encapsulation, :atom,
default: :IPoE,
constraints: [one_of: [:PPPoA, :PPPoE, :IPoE]],
description: "the circuit encapsulation"
field :bandwidth_profile, :struct,
constraints: [instance_of: BandwidthProfile],
description: "the circuit bandwidth profile"
end
defimpl String.Chars do
def to_string(struct) do
inspect(struct)
end
end
end