namespace MxGateway.Client;
///
/// Server-side filters and shape options for
/// .
/// Each property maps directly to the corresponding field on the
/// DiscoverHierarchyRequest proto so the gateway can narrow the
/// hierarchy walk before serializing it back to the client.
///
public sealed record DiscoverHierarchyOptions
{
///
/// Root Galaxy object id to start the walk from. When set, takes
/// precedence over and .
///
public int? RootGobjectId { get; init; }
///
/// Root tag (assigned) name to start the walk from. Used when
/// is null.
///
public string? RootTagName { get; init; }
///
/// Root contained-name dotted path to start the walk from. Used when
/// neither nor are set.
///
public string? RootContainedPath { get; init; }
///
/// Maximum traversal depth below the root, inclusive. Leave null for the
/// server default (unbounded).
///
public int? MaxDepth { get; init; }
///
/// Galaxy category ids to include. Empty means all categories.
///
public IReadOnlyList CategoryIds { get; init; } = Array.Empty();
///
/// Template tag names that must appear somewhere in each returned
/// object's template chain. Empty means no template filter.
///
public IReadOnlyList TemplateChainContains { get; init; } = Array.Empty();
///
/// Optional glob (e.g. "Tank*") matched against each object's tag name.
///
public string? TagNameGlob { get; init; }
///
/// When set, overrides whether each returned GalaxyObject includes
/// its dynamic attribute list. Leave null to use the server default.
///
public bool? IncludeAttributes { get; init; }
///
/// When true, restrict results to objects that bear at least one configured alarm.
///
public bool AlarmBearingOnly { get; init; }
///
/// When true, restrict results to objects that have at least one historized attribute.
///
public bool HistorizedOnly { get; init; }
}