import 'package:freezed_annotation/freezed_annotation.dart'; part 'singbox_rule.freezed.dart'; part 'singbox_rule.g.dart'; @freezed class SingboxRule with _$SingboxRule { const SingboxRule._(); @JsonSerializable(fieldRename: FieldRename.kebab) const factory SingboxRule({ String? ruleSetUrl, String? domains, String? ip, String? port, String? protocol, @Default(RuleNetwork.tcpAndUdp) RuleNetwork network, @Default(RuleOutbound.proxy) RuleOutbound outbound, }) = _SingboxRule; factory SingboxRule.fromJson(Map json) => _$SingboxRuleFromJson(json); } enum RuleOutbound { proxy, bypass, block } @JsonEnum(valueField: 'key') enum RuleNetwork { tcpAndUdp(""), tcp("tcp"), udp("udp"); const RuleNetwork(this.key); final String? key; }