validate method

List<XrayValidationIssue> validate({
  1. bool allowUnknownProtocols = false,
  2. bool allowRawSettings = true,
})

Implementation

List<XrayValidationIssue> validate({
  bool allowUnknownProtocols = false,
  bool allowRawSettings = true,
}) {
  final issues = <XrayValidationIssue>[];
  final inboundTags = _collectTags(
    inbounds?.map((item) => item.tag),
    'inbounds',
    issues,
  );
  final outboundTags = _collectTags(
    outbounds?.map((item) => item.tag),
    'outbounds',
    issues,
  );
  final balancerTags = _collectTags(
    routing?.balancers?.map((item) => item.tag),
    'routing.balancers',
    issues,
  );

  final inboundList = inbounds ?? const <InboundDetourConfig>[];
  for (var index = 0; index < inboundList.length; index++) {
    inboundList[index]._validate(
      issues,
      'inbounds[$index]',
      allowUnknownProtocols: allowUnknownProtocols,
      allowRawSettings: allowRawSettings,
    );
  }

  final outboundList = outbounds ?? const <OutboundDetourConfig>[];
  for (var index = 0; index < outboundList.length; index++) {
    final outbound = outboundList[index];
    outbound._validate(
      issues,
      'outbounds[$index]',
      outboundTags: outboundTags,
      allowUnknownProtocols: allowUnknownProtocols,
      allowRawSettings: allowRawSettings,
    );
  }

  final rules = routing?.ruleList ?? const <RouterRule>[];
  for (var index = 0; index < rules.length; index++) {
    rules[index]._validate(
      issues,
      'routing.rules[$index]',
      inboundTags: inboundTags,
      outboundTags: outboundTags,
      balancerTags: balancerTags,
    );
  }

  final balancers = routing?.balancers ?? const <BalancingRule>[];
  for (var index = 0; index < balancers.length; index++) {
    balancers[index]._validate(
      issues,
      'routing.balancers[$index]',
      outboundTags: outboundTags,
    );
  }

  return issues;
}