From cbff8ad6fc8ab605bf56ada365681e2a08c96ab0 Mon Sep 17 00:00:00 2001 From: rain-bus Date: Tue, 11 Mar 2025 15:09:26 +0800 Subject: [PATCH] Jackson --- build.gradle.kts | 6 +- src/main/kotlin/Main.kt | 97 +++--- src/main/kotlin/conf/Clash.kt | 577 +++++++++++++++------------------- src/main/resources/temp.yml | 10 +- 4 files changed, 302 insertions(+), 388 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 6364539..96f37b1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,6 +1,5 @@ plugins { kotlin("jvm") version "2.1.10" - kotlin("plugin.serialization") version "2.1.10" } group = "com.subman" @@ -13,8 +12,9 @@ repositories { dependencies { testImplementation(kotlin("test")) - implementation("com.charleskorn.kaml:kaml:0.72.0") - implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.0") + implementation("com.fasterxml.jackson.core:jackson-databind:2.18.3") + implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.18.3") + implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.18.3") implementation("io.ktor:ktor-client-core:3.1.1") implementation("io.ktor:ktor-client-cio:3.1.1") } diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index 91b486c..295b06d 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -1,54 +1,53 @@ -package com.subman +import com.fasterxml.jackson.annotation.JsonSubTypes +import com.fasterxml.jackson.annotation.JsonTypeInfo +import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.databind.SerializationFeature +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory +import com.fasterxml.jackson.module.kotlin.KotlinModule +import com.fasterxml.jackson.module.kotlin.readValue +import com.fasterxml.jackson.module.kotlin.registerKotlinModule -import Clash -import com.charleskorn.kaml.PolymorphismStyle -import com.charleskorn.kaml.Yaml -import com.charleskorn.kaml.YamlConfiguration -import com.charleskorn.kaml.YamlNamingStrategy -import io.ktor.client.* -import io.ktor.client.call.* -import io.ktor.client.engine.cio.* -import io.ktor.client.request.* -import io.ktor.client.statement.* -import kotlinx.coroutines.runBlocking -import kotlinx.serialization.Serializable -import kotlinx.serialization.decodeFromString -import kotlinx.serialization.json.Json -import kotlinx.serialization.json.JsonNamingStrategy -import java.io.File - -@Serializable -data class Temp( - val bCd: List, - val abCd: String? = null, +// 基类,使用注解指定多态类型信息 +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true) +@JsonSubTypes( + JsonSubTypes.Type(value = Dog::class, name = "dog"), + JsonSubTypes.Type(value = Cat::class, name = "cat") +) +abstract class Animal( + open val name: String ) -//fun main() { -// val ymlStr = File("/Users/rainbus/Projects/Join/Java/subconverter4j/src/main/resources/temp.json").readText(); -// val json = Json { -// namingStrategy = JsonNamingStrategy.KebabCase -// } -// println(json.decodeFromString(Temp.serializer(), ymlStr)) -//} +// 子类 Dog +data class Dog( + override val name: String, + val barkVolume: Int, + val type: String +) : Animal(name) + +// 子类 Cat +data class Cat( + override val name: String, + val purrFrequency: Int, + val type: String +) : Animal(name) + +val yamlMapper: ObjectMapper = ObjectMapper(YAMLFactory()).registerKotlinModule() +val objectMapper: ObjectMapper = ObjectMapper().registerKotlinModule() fun main() { - val client = HttpClient(CIO); - runBlocking { -// val resp: HttpResponse = -// client.get("https://UWUyUZlo.doggygo.top:8443/api/v1/client/657ae66e99810c9ab390c63c05cc2fac?flag=clashmeta"); -// val strBody: String = resp.body(); -// print(strBody) - val strBody = - File("E:\\Project\\Join\\Kotlin\\subconverter4j\\src\\main\\resources\\gougou-temp.yaml").readText(); - val yaml = Yaml( - configuration = YamlConfiguration( - encodeDefaults = false, - yamlNamingStrategy = YamlNamingStrategy.KebabCase, - polymorphismStyle = PolymorphismStyle.Property - ) - ) - println() - val clash = yaml.decodeFromString(Clash.serializer(), strBody) - println(yaml.encodeToString(Clash.serializer(), clash)) - } -} + val yaml = """ + - type: dog + name: Buddy + barkVolume: 80 + - type: cat + name: Whiskers + purrFrequency: 25 + """.trimIndent() + val animals = yamlMapper.readValue>(yaml) +// val animals = listOf( +// Dog("cat", 80), +// Cat("dog", 25), +// ) + animals.forEach { println(it) } + println(yamlMapper.writeValueAsString(animals)) +} \ No newline at end of file diff --git a/src/main/kotlin/conf/Clash.kt b/src/main/kotlin/conf/Clash.kt index 0a5c118..410fb84 100644 --- a/src/main/kotlin/conf/Clash.kt +++ b/src/main/kotlin/conf/Clash.kt @@ -1,8 +1,3 @@ -import com.charleskorn.kaml.YamlNode -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable - -@Serializable data class Clash( /*------------------------------------------- *General configuration* -------------------------------------------*/ // Allow LAN @@ -63,19 +58,30 @@ data class Clash( val geoxUrl: GeoXUrl? = null, val geoAutoUpdate: Boolean? = null, val geoUpdateInterval: Int? = null, + val geodataMode: Boolean? = null, + val geodataLoader: String? = null, + val geoSiteMatcher: String? = null, + // Global Client Fingerprint val globalClientFingerprint: String? = null, + // IPV6 + val ipv6: Boolean? = null, + // Custom Global UA val globalUa: String? = null, // ETag Support val etagSupport: Boolean? = null, + // Global Config + val ssConfig: String? = null, + val vmessConfig: String? = null, + /*------------------------------------------------ *DNS* ------------------------------------------------*/ - val hosts: List? = null, // TODO: + val hosts: List? = null, val dns: DNS? = null, val sniffer: Sniffer? = null, @@ -89,45 +95,54 @@ data class Clash( val tproxyPort: Int? = null, val tun: Tun? = null, val listeners: List? = null, + // inbound-tfo + val inboundTfo: Boolean? = null, + val inboundMptcp: Boolean? = null, // Outbound val proxies: List? = null, val proxyProviders: Map? = null, - // 未在文档中提到的属性 - val experimental: Experimental? = null, - val tunnels: List? = null, val proxyGroups: List? = null, + val ruleProviders: Map? = null, + // TODO val rules: List? = null, val subRules: Map>? = null, + + + // TODO + val tunnels: List? = null, + val ntp: NTP? = null, + val experimental: Experimental? = null, + + val iptables: IPTables? = null, + val clashForAndroid: ClashForAndroid? = null, + val tuicServer: TuicServer? = null, + ) -@Serializable data class GeoXUrl( val geoip: String? = null, val geosite: String? = null, val mmdb: String? = null, val asn: String? = null ) -@Serializable data class TLS( val certificate: String? = null, val privateKey: String? = null, val customCertifactes: List? = null ) -@Serializable data class ExternalControllerCors( val allowOrigins: List? = null, val allowPrivateNetwork: Boolean? = null ) - -@Serializable data class Experimental( - val quicGoDisableGso: Boolean? = null + val fingerprints: List? = null, + val quicGoDisableGSO: Boolean? = null, + val quicGoDisableECN: Boolean? = null, + val ip4pEnable: Boolean? = null, ) -@Serializable data class Profile( val storeSelected: Boolean? = null, val storeFakeIp: Boolean? = null ) -@Serializable data class Tun( val enable: Boolean? = null, val stack: String? = null, @@ -163,13 +178,12 @@ data class Tun( @Deprecated("") val inet6RouteExcludeAddress: List? = null ) -@Serializable data class Sniffer( val enable: Boolean? = null, val forceDnsMapping: Boolean? = null, val parsePureIp: Boolean? = null, val overrideDestination: Boolean? = null, - val sniff: Sniff? = null, + val sniff: Map? = null, val forceDomain: List? = null, val skipDomain: List? = null, val skipSrcAddress: List? = null, @@ -178,34 +192,16 @@ data class Sniffer( @Deprecated("") val portWhitelist: List? = null ) -@Serializable data class Sniff( - val QUIC: SniffQUIC? = null, val TLS: SniffTLS? = null, val HTTP: SniffHTTP? = null + val ports: List? = null, + val overrideDestination: Boolean? = null, ) -@Serializable -data class SniffQUIC( - val ports: List? = null -) - -@Serializable -data class SniffTLS( - val ports: List? = null -) - -@Serializable -data class SniffHTTP( - val ports: List? = null, val overrideDestination: Boolean? = null -) - -@Serializable sealed class Tunnel { - @Serializable data class InlineTunnel( val network: String? = null, val address: String? = null, val target: String? = null, val proxy: String? = null ) : Tunnel() - @Serializable data class FullTunnel( val network: List? = null, val address: String? = null, @@ -214,41 +210,39 @@ sealed class Tunnel { ) : Tunnel() } -@Serializable data class DNS( - val cacheAlgorithm: String? = null, val enable: Boolean? = null, val preferH3: Boolean? = null, - val listen: String? = null, val ipv6: Boolean? = null, - val ipv6Timeout: Int? = null, - val defaultNameserver: List? = null, - val enhancedMode: String? = null, - val fakeIpRange: String? = null, - val fakeIpFilter: List? = null, - val fakeIpFilterMode: String? = null, + val ipv6Timeout: UInt? = null, val useHosts: Boolean? = null, val useSystemHosts: Boolean? = null, val respectRules: Boolean? = null, - val nameserver: List? = null, + val nameServer: List? = null, val fallback: List? = null, - val proxyServerNameserver: List? = null, - val directNameserver: List? = null, - val directNameserverFollowPolicy: Boolean? = null, val fallbackFilter: FallbackFilter? = null, - val nameserverPolicy: Map>? = null + val listen: String? = null, + val enhancedMode: Int? = null, + val fakeIPRange: String? = null, + val fakeIPFilter: List? = null, + val fakeIPFilterMode: Int? = null, + val defaultNameserver: List? = null, + val cacheAlgorithm: String? = null, + // TODO +// val nameServerPolicy: OrderedMap? = null, + val proxyServerNameserver: List? = null, + val directNameServer: List? = null, + val directNameServerFollowPolicy: Boolean? = null ) -@Serializable data class FallbackFilter( - val geoip: Boolean? = null, - val geoipCode: String? = null, - val geosite: List? = null, - val ipcidr: List? = null, - val domain: List? = null + val geoIP: Boolean? = null, + val geoIPCode: String? = null, + val ipCIDR: List? = null, + val domain: List? = null, + val geoSite: List? = null ) -@Serializable sealed class Proxy { abstract val tfo: Boolean? abstract val mptcp: Boolean? @@ -258,8 +252,6 @@ sealed class Proxy { abstract val dialerProxy: String? abstract val smux: SingMuxOption? - @Serializable - @SerialName("direct") data class DirectProxy( val name: String? = null, override val tfo: Boolean?, @@ -271,15 +263,11 @@ sealed class Proxy { override val smux: SingMuxOption?, ) : Proxy() - @Serializable - @SerialName("reject") data class RejectProxy( val name: String? = null, ) - @Serializable - @SerialName("dns") data class DnsProxy( val name: String? = null, override val tfo: Boolean? = null, @@ -291,8 +279,6 @@ sealed class Proxy { override val smux: SingMuxOption?, ) : Proxy() - @Serializable - @SerialName("http") data class HttpProxy( val name: String? = null, val server: String, @@ -313,8 +299,6 @@ sealed class Proxy { override val smux: SingMuxOption?, ) : Proxy() - @Serializable - @SerialName("hysteria") data class HysteriaProxy( val name: String? = null, val server: String? = null, @@ -349,8 +333,6 @@ sealed class Proxy { override val smux: SingMuxOption?, ) : Proxy() - @Serializable - @SerialName("hysteria2") data class Hysteria2Proxy( val name: String? = null, val server: String? = null, @@ -371,7 +353,6 @@ sealed class Proxy { val cwnd: Int? = null, val udpMTU: Int? = null, - // quic-go special config val initialStreamReceiveWindow: ULong? = null, val maxStreamReceiveWindow: ULong? = null, val initialConnectionReceiveWindow: ULong? = null, @@ -386,8 +367,6 @@ sealed class Proxy { override val smux: SingMuxOption?, ) : Proxy() - @Serializable - @SerialName("mieru") data class MieruProxy( val name: String? = null, val server: String? = null, @@ -407,8 +386,6 @@ sealed class Proxy { override val smux: SingMuxOption?, ) : Proxy() - @Serializable - @SerialName("ss") data class ShadowSocksProxy( val name: String? = null, val server: String? = null, @@ -418,7 +395,7 @@ sealed class Proxy { val udp: Boolean? = null, val plugin: String? = null, // NOTE: 暂时先不对该字段进行解析 - val pluginOpts: Map? = null, + val pluginOpts: Map? = null, val udpOverTCP: Boolean? = null, val udpOverTCPVersion: Int? = null, val clientFingerprint: String? = null, @@ -432,8 +409,6 @@ sealed class Proxy { override val smux: SingMuxOption?, ) : Proxy() - @Serializable - @SerialName("ssr") data class ShadowSocksRProxy( val name: String? = null, val server: String? = null, @@ -455,8 +430,6 @@ sealed class Proxy { override val smux: SingMuxOption?, ) : Proxy() - @Serializable - @SerialName("snell") data class SnellProxy( val name: String? = null, val server: String? = null, @@ -475,8 +448,6 @@ sealed class Proxy { override val smux: SingMuxOption?, ) : Proxy() - @Serializable - @SerialName("socks5") data class Socks5Proxy( val name: String? = null, val server: String? = null, @@ -497,8 +468,6 @@ sealed class Proxy { override val smux: SingMuxOption?, ) : Proxy() - @Serializable - @SerialName("ssh") data class SshProxy( val name: String? = null, val server: String? = null, @@ -519,8 +488,6 @@ sealed class Proxy { override val smux: SingMuxOption?, ) : Proxy() - @Serializable - @SerialName("trojan") data class TrojanProxy( val name: String? = null, val server: String? = null, @@ -547,8 +514,6 @@ sealed class Proxy { override val smux: SingMuxOption?, ) : Proxy() - @Serializable - @SerialName("tuic") data class TuicProxy( val name: String? = null, val server: String? = null, @@ -589,8 +554,6 @@ sealed class Proxy { override val smux: SingMuxOption?, ) : Proxy() - @Serializable - @SerialName("vless") data class VlessProxy( val name: String? = null, val server: String? = null, @@ -625,8 +588,6 @@ sealed class Proxy { override val smux: SingMuxOption?, ) : Proxy() - @Serializable - @SerialName("vmess") data class VmessProxy( val name: String? = null, val server: String? = null, @@ -662,8 +623,6 @@ sealed class Proxy { override val smux: SingMuxOption?, ) : Proxy() - @Serializable - @SerialName("wireguard") data class WireGuardProxy( val name: String? = null, val ip: String? = null, @@ -688,31 +647,26 @@ sealed class Proxy { override val smux: SingMuxOption?, ) : Proxy() - @Serializable data class RealityOptions( val publicKey: String? = null, val shortID: String? = null, ) - @Serializable data class GrpcOptions( val grpcServiceName: String? = null, ) - @Serializable data class HTTPOptions( val method: String? = null, val path: List? = null, val headers: Map>? = null, ) - @Serializable data class HTTP2Options( val host: List? = null, val path: String? = null, ) - @Serializable data class WSOptions( val path: String? = null, val headers: Map? = null, @@ -722,14 +676,12 @@ sealed class Proxy { val v2rayHttpUpgradeFastOpen: Boolean? = null, ) - @Serializable data class TrojanSSOption( val enabled: Boolean? = null, val method: String? = null, val password: String? = null, ) - @Serializable data class WireGuardPeerOption( val server: String? = null, val port: Int? = null, @@ -739,7 +691,6 @@ sealed class Proxy { val allowedIPs: List? = null, ) - @Serializable data class AmneziaWGOption( val jc: Int? = null, val jMin: Int? = null, @@ -752,7 +703,6 @@ sealed class Proxy { val h4: UInt? = null, ) - @Serializable data class SingMuxOption( val enabled: Boolean? = null, val protocol: String? = null, @@ -765,14 +715,12 @@ sealed class Proxy { val brutalOpts: BrutalOption? = null, ) - @Serializable data class BrutalOption( val enabled: Boolean? = null, val up: String? = null, val down: String? = null, ) - @Serializable data class SimpleObfsOption( val mode: String? = null, val host: String? = null @@ -780,7 +728,6 @@ sealed class Proxy { } -@Serializable data class SmuxConfig( val enabled: Boolean? = null, val protocol: String? = null, @@ -792,154 +739,151 @@ data class SmuxConfig( val padding: Boolean? = null, val brutalOpts: BruteOpts? = null ) { - @Serializable data class BruteOpts( val enabled: Boolean? = null, val up: Int? = null, val down: Int? = null ) } -@Serializable sealed class ProxyGroup { - @Serializable - data class RelayGroup( - val name: String? = null, val proxies: List? = null, val type: String? = null - ) : ProxyGroup() + abstract val name: String? + abstract val proxies: List? + abstract val use: List? + abstract val url: String? + abstract val interval: Int? + abstract val lazy: Boolean? + abstract val timeout: Int? + abstract val maxFailedTimes: Int? + abstract val disableUDP: Boolean? + @Deprecated("") abstract val interfaceName: String? + @Deprecated("") abstract val routingMark: Int? + abstract val includeAll: Boolean? + abstract val includeAllProxies: Boolean? + abstract val includeAllProviders: Boolean? + abstract val filter: String? + abstract val excludeFilter: String? + abstract val excludeType: String? + abstract val expectedStatus: String? + abstract val hidden: Boolean? + abstract val icon: String? - @Serializable - data class UrlTestGroup( - val name: String? = null, - val proxies: List? = null, - val url: String? = null, - val interval: Int? = null, - val tolerance: Int? = null, - val lazy: Boolean? = null, - val expectedStatus: Int? = null, - val type: String? = null - ) : ProxyGroup() + data class UrlTest( + override val name: String?, + override val proxies: List?, + override val use: List?, + override val url: String?, + override val interval: Int?, + override val lazy: Boolean?, + override val timeout: Int?, + override val maxFailedTimes: Int?, + override val disableUDP: Boolean?, + override val interfaceName: String?, + override val routingMark: Int?, + override val includeAll: Boolean?, + override val includeAllProxies: Boolean?, + override val includeAllProviders: Boolean?, + override val filter: String?, + override val excludeFilter: String?, + override val excludeType: String?, + override val expectedStatus: String?, + override val hidden: Boolean?, + override val icon: String?, + val tolerance: Int?, + ):ProxyGroup() - @Serializable - data class FallbackGroup( - val name: String? = null, - val proxies: List? = null, - val url: String? = null, - val interval: Int? = null, - val type: String? = null - ) : ProxyGroup() + data class Select( + override val name: String?, + override val proxies: List?, + override val use: List?, + override val url: String?, + override val interval: Int?, + override val lazy: Boolean?, + override val timeout: Int?, + override val maxFailedTimes: Int?, + override val disableUDP: Boolean?, + override val interfaceName: String?, + override val routingMark: Int?, + override val includeAll: Boolean?, + override val includeAllProxies: Boolean?, + override val includeAllProviders: Boolean?, + override val filter: String?, + override val excludeFilter: String?, + override val excludeType: String?, + override val expectedStatus: String?, + override val hidden: Boolean?, + override val icon: String? + ): ProxyGroup() - @Serializable - data class LoadBalanceGroup( - val name: String? = null, - val proxies: List? = null, - val url: String? = null, - val interval: Int? = null, - val strategy: String? = null, - val type: String? = null - ) : ProxyGroup() + data class Fallback( + override val name: String?, + override val proxies: List?, + override val use: List?, + override val url: String?, + override val interval: Int?, + override val lazy: Boolean?, + override val timeout: Int?, + override val maxFailedTimes: Int?, + override val disableUDP: Boolean?, + override val interfaceName: String?, + override val routingMark: Int?, + override val includeAll: Boolean?, + override val includeAllProxies: Boolean?, + override val includeAllProviders: Boolean?, + override val filter: String?, + override val excludeFilter: String?, + override val excludeType: String?, + override val expectedStatus: String?, + override val hidden: Boolean?, + override val icon: String? + ): ProxyGroup() - @Serializable - data class SelectGroup( - val name: String? = null, - val proxies: List? = null, - val disableUdp: Boolean? = null, - val type: String? = null - ) : ProxyGroup() + data class LoadBalance( + override val name: String?, + override val proxies: List?, + override val use: List?, + override val url: String?, + override val interval: Int?, + override val lazy: Boolean?, + override val timeout: Int?, + override val maxFailedTimes: Int?, + override val disableUDP: Boolean?, + override val interfaceName: String?, + override val routingMark: Int?, + override val includeAll: Boolean?, + override val includeAllProxies: Boolean?, + override val includeAllProviders: Boolean?, + override val filter: String?, + override val excludeFilter: String?, + override val excludeType: String?, + override val expectedStatus: String?, + override val hidden: Boolean?, + override val icon: String?, + val strategy: String?, + ): ProxyGroup() - @Serializable - data class InterfaceGroup( - val name: String? = null, - val interfaceName: String? = null, - val routingMark: Int? = null, - val proxies: List? = null, - val type: String? = null - ) : ProxyGroup() - - @Serializable - data class UseProviderGroup( - val name: String? = null, - val filter: String? = null, - val use: List? = null, - val proxies: List? = null, - val type: String? = null - ) : ProxyGroup() + data class Relay( + override val name: String?, + override val proxies: List?, + override val use: List?, + override val url: String?, + override val interval: Int?, + override val lazy: Boolean?, + override val timeout: Int?, + override val maxFailedTimes: Int?, + override val disableUDP: Boolean?, + override val interfaceName: String?, + override val routingMark: Int?, + override val includeAll: Boolean?, + override val includeAllProxies: Boolean?, + override val includeAllProviders: Boolean?, + override val filter: String?, + override val excludeFilter: String?, + override val excludeType: String?, + override val expectedStatus: String?, + override val hidden: Boolean?, + override val icon: String? + ):ProxyGroup() } -//@Serializable -//sealed class ProxyProvider { -// @Serializable -// data class HttpProxyProvider( -// val type: String? = null, -// val url: String? = null, -// val interval: Int? = null, -// val path: String? = null, -// val proxy: String? = null, -// val header: Header? = null, -// val healthCheck: HealthCheck? = null, -// val override: Override? = null -// ) : ProxyProvider() -// -// @Serializable -// data class InlineProxyProvider( -// val type: String? = null, val dialerProxy: String? = null, val payload: List? = null -// ) : ProxyProvider() -// -// @Serializable -// data class FileProxyProvider( -// val type: String? = null, val path: String? = null, val healthCheck: HealthCheck? = null -// ) : ProxyProvider() -//} - - -//data class ProxyProvider( -// val type: String? = null, -// val path: String? = null, -// val url: String? = null, -// val proxy: String? = null, -// val interval: Int? = null, -// val filter: String? = null, -// val excludeFilter: String? = null, -// val excludeType: String? = null, -// val dialerProxy: String? = null, -// val sizeLimit: Long? = null, -// val payload: List>? = null, -// val healthCheck: HealthCheck? = null, -// val override: Override? = null, -// val header: Map>? = null -//) { -// data class HealthCheck( -// val enable: Boolean? = null, -// val url: String? = null, -// val interval: Int? = null, -// val testTimeout: Int? = null, -// val lazy: Boolean? = null, -// val expectedStatus: String? = null -// ) -// -// data class Override( -// val tfo: Boolean? = null, -// val mptcp: Boolean? = null, -// val udp: Boolean? = null, -// val udpOverTcp: Boolean? = null, -// val up: String? = null, -// val down: String? = null, -// val dialerProxy: String? = null, -// val skipCertVerify: Boolean? = null, -// val interfaceName: String? = null, -// val routingMark: Int? = null, -// val ipVersion: String? = null, -// val additionalPrefix: String? = null, -// val additionalSuffix: String? = null, -// val proxyName: List? = null -// ) -// -// data class OverrideProxyNameSchema( -// val pattern: String? = null, -// val target: String? = null -// ) -// -//} - - -@Serializable sealed class ProxyProvider { abstract val name: String? abstract val interval: Int? @@ -950,8 +894,6 @@ sealed class ProxyProvider { abstract val healthCheck: HealthCheck? abstract val override: Override? - @Serializable - @SerialName("file") data class FileProvider( override val name: String? = null, override val interval: Int?, @@ -964,8 +906,6 @@ sealed class ProxyProvider { val path: String?, ) : ProxyProvider() - @Serializable - @SerialName("http") data class HttpProvider( override val name: String? = null, override val interval: Int?, @@ -982,8 +922,6 @@ sealed class ProxyProvider { val header: Map>? = null, ) : ProxyProvider() - @Serializable - @SerialName("inline") data class InlineProvider( override val name: String? = null, override val interval: Int?, @@ -994,10 +932,9 @@ sealed class ProxyProvider { override val healthCheck: HealthCheck?, override val override: Override?, // TODO: - val payload: List>?, + val payload: List>?, ) : ProxyProvider() - @Serializable data class HealthCheck( val enable: Boolean, val url: String, @@ -1007,7 +944,6 @@ sealed class ProxyProvider { val expectedStatus: String? = null, ) - @Serializable data class Override( val tfo: Boolean? = null, val mptcp: Boolean? = null, @@ -1025,54 +961,41 @@ sealed class ProxyProvider { val proxyName: List? = null, ) - @Serializable data class OverrideProxyName( val pattern: String, val target: String, ) } - - -@Serializable sealed class RuleProvider { - @Serializable - data class HttpRuleProvider( - val behavior: String? = null, + abstract val behavior: String? + + data class FileProvider( + override val behavior: String? = null, + val format: String? = null, + val interval: Int? = null, + val path: String? = null, + ) : RuleProvider() + + data class HttpProvider( + override val behavior: String? = null, + val format: String? = null, val interval: Int? = null, val path: String? = null, - val type: String? = null, val url: String? = null, val proxy: String? = null, - val sizeLimit: Int? = null + val sizeLimit: Long? = null, ) : RuleProvider() - - @Serializable - data class FileRuleProvider( - val behavior: String? = null, val interval: Int? = null, val path: String? = null, val type: String? = null - ) : RuleProvider() - - @Serializable - data class MrsRuleProvider( - val type: String? = null, - val url: String? = null, - val format: String? = null, - val behavior: String? = null, - val path: String? = null - ) : RuleProvider() - - @Serializable - data class InlineRuleProvider( - val type: String? = null, val behavior: String? = null, val payload: List? = null + data class InlineProvider( + override val behavior: String, + val payload: List, ) : RuleProvider() } -@Serializable data class Header( val userAgent: List? = null, val accept: List? = null, val authorization: List? = null ) -@Serializable data class HealthCheck( val enable: Boolean? = null, val interval: Int? = null, @@ -1081,7 +1004,6 @@ data class HealthCheck( val expectedStatus: Int? = null ) -@Serializable data class Override( val skipCertVerify: Boolean? = null, val udp: Boolean? = null, @@ -1096,12 +1018,10 @@ data class Override( val proxyName: List? = null ) -@Serializable data class ProxyName( val pattern: String? = null, val target: String? = null ) -@Serializable data class Payload( val name: String? = null, val type: String? = null, @@ -1111,7 +1031,6 @@ data class Payload( val password: String? = null ) -@Serializable sealed class Listener { abstract val name: String? abstract val port: Int? @@ -1119,8 +1038,6 @@ sealed class Listener { abstract val rule: String? abstract val proxy: String? - @Serializable - @SerialName("http") data class HttpListener( override val name: String? = null, override val port: Int? = null, @@ -1132,8 +1049,6 @@ sealed class Listener { val privateKey: String? = null ) : Listener() - @Serializable - @SerialName("socks") data class SocksListener( override val name: String? = null, override val port: Int? = null, @@ -1146,8 +1061,6 @@ sealed class Listener { val privateKey: String? = null ) : Listener() - @Serializable - @SerialName("mixed") data class MixedListener( override val name: String? = null, override val port: Int? = null, @@ -1160,8 +1073,6 @@ sealed class Listener { val privateKey: String? = null ) : Listener() - @Serializable - @SerialName("redir") data class RedirListener( override val name: String? = null, override val port: Int? = null, @@ -1170,8 +1081,6 @@ sealed class Listener { override val proxy: String? = null ) : Listener() - @Serializable - @SerialName("tproxy") data class TProxyListener( override val name: String? = null, override val port: Int? = null, @@ -1181,8 +1090,6 @@ sealed class Listener { val udp: Boolean? = null ) : Listener() - @Serializable - @SerialName("tun") data class TunListener( override val name: String? = null, override val port: Int? = null, @@ -1209,8 +1116,6 @@ sealed class Listener { val excludePackage: List? = null ) : Listener() - @Serializable - @SerialName("shadowsocks") data class ShadowsocksListener( override val name: String? = null, override val port: Int? = null, @@ -1222,8 +1127,6 @@ sealed class Listener { val udp: Boolean? = null ) : Listener() - @Serializable - @SerialName("vmess") data class VmessListener( override val name: String? = null, override val port: Int? = null, @@ -1237,8 +1140,6 @@ sealed class Listener { val realityConfig: RealityConfig? = null ) : Listener() - @Serializable - @SerialName("tuic") data class TuicListener( override val name: String? = null, override val port: Int? = null, @@ -1256,8 +1157,6 @@ sealed class Listener { val maxUdpRelayPacketSize: Int? = null ) : Listener() - @Serializable - @SerialName("hysteria2") data class Hysteria2Listener( override val name: String? = null, override val port: Int? = null, @@ -1276,8 +1175,6 @@ sealed class Listener { val privateKey: String? = null ) : Listener() - @Serializable - @SerialName("tunnel") data class TunnelListener( override val name: String? = null, override val port: Int? = null, @@ -1288,8 +1185,6 @@ sealed class Listener { val target: String? = null ) : Listener() - @Serializable - @SerialName("vless") data class VlessListener( override val name: String? = null, override val port: Int? = null, @@ -1302,32 +1197,37 @@ sealed class Listener { val privateKey: String? = null, val realityConfig: RealityConfig? = null ) : Listener() + + data class User( + val username: String? = null, val password: String? = null + ) + + data class VmessUser( + val username: String? = null, val uuid: String? = null, val alterId: Int? = null + ) + + data class VlessUser( + val username: String? = null, val uuid: String? = null, val flow: String? = null + ) + + data class RealityConfig( + val dest: String? = null, + val privateKey: String? = null, + val shortId: List? = null, + val serverNames: List? = null + ) } -@Serializable -data class User( - val username: String? = null, val password: String? = null + +data class NTP( + val enable: Boolean? = null, + val server: String? = null, + val port: Int? = null, + val interval: Int? = null, + val dialerProxy: String? = null, + val writeToSystem: Boolean? = null ) -@Serializable -data class VmessUser( - val username: String? = null, val uuid: String? = null, val alterId: Int? = null -) - -@Serializable -data class VlessUser( - val username: String? = null, val uuid: String? = null, val flow: String? = null -) - -@Serializable -data class RealityConfig( - val dest: String? = null, - val privateKey: String? = null, - val shortId: List? = null, - val serverNames: List? = null -) - -@Serializable data class TuicServer( val enable: Boolean? = null, val listen: String? = null, @@ -1339,5 +1239,18 @@ data class TuicServer( val maxIdleTime: Int? = null, val authenticationTimeout: Int? = null, val alpn: List? = null, - val maxUdpRelayPacketSize: Int? = null + val maxUdpRelayPacketSize: Int? = null, + val cwnd: Int? = null, +) + +data class IPTables( + val enable: Boolean? = null, + val inboundInterface: String? = null, + val bypass: List? = null, + val dnsRedirect: Boolean? = null +) + +data class ClashForAndroid( + val appendSystemDns: Boolean? = null, + val uiSubtitlePattern: String? = null ) \ No newline at end of file diff --git a/src/main/resources/temp.yml b/src/main/resources/temp.yml index 988aaa4..8db0ac8 100644 --- a/src/main/resources/temp.yml +++ b/src/main/resources/temp.yml @@ -1,4 +1,6 @@ -a: abc -b: - - 1 - - 2 \ No newline at end of file +tunnels: + - tcp/udp,127.0.0.1:6553,8.8.8.8:53,proxy + - network: [tcp, udp] + address: 127.0.0.1:6553 + target: 8.8.8.8:53 + proxy: proxy \ No newline at end of file