namespace DnsmasqWebUI.Models.EffectiveConfig; /// /// Source file for each field in . /// Same property names as config: use sources.Port for config.Port, sources.AddnHostsPaths[i].Source for config.AddnHostsPaths[i], etc. /// Enables the UI to show exactly where each value came from and whether it is readonly. /// /// /// Single-value and flags: Property is ?. Readonly = source?.IsReadOnly == true. Tooltip = . /// Multi-value: Property is IReadOnlyList<ValueWithSource> or PathWithSource for addn-hosts. Use sources.AddnHostsPaths[i].Source. Same readonly/tooltip from that Source. /// public record EffectiveConfigSources( // --- Hosts --- ConfigValueSource? NoHosts, IReadOnlyList AddnHostsPaths, // --- Multi-value (ARG_DUP): source per value --- IReadOnlyList ServerLocalValues, IReadOnlyList AddressValues, IReadOnlyList Interfaces, IReadOnlyList ListenAddresses, IReadOnlyList ExceptInterfaces, IReadOnlyList DhcpRanges, IReadOnlyList DhcpHostLines, IReadOnlyList DhcpOptionLines, IReadOnlyList ResolvFiles, // --- Flags (set if any occurrence; source = first file that set it, so we know if readonly) --- ConfigValueSource? ExpandHosts, ConfigValueSource? BogusPriv, ConfigValueSource? StrictOrder, ConfigValueSource? NoResolv, ConfigValueSource? DomainNeeded, ConfigValueSource? NoPoll, ConfigValueSource? BindInterfaces, ConfigValueSource? NoNegcache, ConfigValueSource? DhcpAuthoritative, ConfigValueSource? LeasefileRo, // --- Single-value (last occurrence wins; source = file that set the last value) --- ConfigValueSource? DhcpLeaseFilePath, ConfigValueSource? CacheSize, ConfigValueSource? Port, ConfigValueSource? LocalTtl, ConfigValueSource? PidFilePath, ConfigValueSource? User, ConfigValueSource? Group, ConfigValueSource? LogFacility, ConfigValueSource? DhcpLeaseMax, ConfigValueSource? NegTtl, ConfigValueSource? MaxTtl, ConfigValueSource? MaxCacheTtl, ConfigValueSource? MinCacheTtl, ConfigValueSource? DhcpTtl );