# SPDX-FileCopyrightText: 2024 Lubin Bailly <lubin.bailly@dgnum.eu> # # SPDX-License-Identifier: EUPL-1.2 { config, lib, ... }: let inherit (lib) mapAttrsToList mkEnableOption mkOption optionalString ; inherit (lib.types) attrsOf str submodule; interface-module = { name, config, ... }: { options = { enable = mkEnableOption "the PoE for this interface"; xml = mkOption { type = str; visible = false; readOnly = true; }; }; config.xml = '' <interface><name>${name}</name>${optionalString (!config.enable) "<disable/>"}</interface> ''; }; in { options = { poe.interfaces = mkOption { type = attrsOf (submodule interface-module); default = { }; description = '' PoE configuration of interfaces. ''; }; netconf.xmls.poe = mkOption { type = str; visible = false; readOnly = true; }; }; config.netconf.xmls.poe = '' <poe operation="replace"> ${builtins.concatStringsSep "" (mapAttrsToList (_: intf: intf.xml) config.poe.interfaces)} </poe> ''; }