# SPDX-FileCopyrightText: 2025 diffo_example 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