decode method

EndpointMetadata? decode(
  1. String endpointName
)

Decode an endpoint name string back into structured metadata.

Returns null if the string is not a valid Airpass endpoint name (wrong magic prefix, too few fields, etc.).

Implementation

EndpointMetadata? decode(String endpointName) {
  final parts = endpointName.split(kEndpointDelimiter);

  // Need at least 5 fields: magic, version, role, groups, nodeIdPrefix
  // Optionally 6 fields if a micro-message is present
  if (parts.length < 5 || parts.length > 6) return null;

  // Verify magic prefix
  if (parts[0] != kEndpointMagic) return null;

  final version = int.tryParse(parts[1]);
  if (version == null) return null;

  // Parse groups field: split by comma
  final groupsRaw = parts[3];
  final groupIds = groupsRaw == '*' ? <String>['*'] : groupsRaw.split(kGroupSeparator);

  // Parse optional micro-message
  final microMessage = parts.length == 6 ? parts[5] : null;

  return EndpointMetadata(
    protocolVersion: version,
    role: NodeRole.fromCode(parts[2]),
    groupIds: groupIds,
    nodeIdPrefix: parts[4],
    microMessage: microMessage,
  );
}