From 5d781007ed39b998d2980fbf2bb6e89471c141a7 Mon Sep 17 00:00:00 2001 From: Yibo Zhuang Date: Thu, 18 Dec 2025 21:02:17 -0800 Subject: [PATCH] Make IP/CIDR types conform to Codable These types can benefit from swift's automatic synthesis as the properties already conform to Codable. This will give some flexibility for clients using these types to not have to add extension and implement the encoding / decoding separately. --- Sources/ContainerizationExtras/CIDRv4.swift | 2 +- Sources/ContainerizationExtras/CIDRv6.swift | 2 +- Sources/ContainerizationExtras/IPv4Address.swift | 2 +- Sources/ContainerizationExtras/IPv6Address.swift | 2 +- Sources/ContainerizationExtras/Prefix.swift | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Sources/ContainerizationExtras/CIDRv4.swift b/Sources/ContainerizationExtras/CIDRv4.swift index fb7ead78..7bc7c562 100644 --- a/Sources/ContainerizationExtras/CIDRv4.swift +++ b/Sources/ContainerizationExtras/CIDRv4.swift @@ -16,7 +16,7 @@ /// Describes an IPv4 CIDR address block. @frozen -public struct CIDRv4: CustomStringConvertible, Equatable, Sendable, Hashable { +public struct CIDRv4: CustomStringConvertible, Equatable, Sendable, Hashable, Codable { /// The IP component of this CIDR address. public let address: IPv4Address diff --git a/Sources/ContainerizationExtras/CIDRv6.swift b/Sources/ContainerizationExtras/CIDRv6.swift index 42be276b..32f15b74 100644 --- a/Sources/ContainerizationExtras/CIDRv6.swift +++ b/Sources/ContainerizationExtras/CIDRv6.swift @@ -16,7 +16,7 @@ /// Describes an IPv4 or IPv6 CIDR address block. @frozen -public struct CIDRv6: CustomStringConvertible, Equatable, Sendable, Hashable { +public struct CIDRv6: CustomStringConvertible, Equatable, Sendable, Hashable, Codable { /// The IP component of this CIDR address. public let address: IPv6Address diff --git a/Sources/ContainerizationExtras/IPv4Address.swift b/Sources/ContainerizationExtras/IPv4Address.swift index cfa6caa4..f8cf5be0 100644 --- a/Sources/ContainerizationExtras/IPv4Address.swift +++ b/Sources/ContainerizationExtras/IPv4Address.swift @@ -15,7 +15,7 @@ //===----------------------------------------------------------------------===// @frozen -public struct IPv4Address: Sendable, Hashable, CustomStringConvertible, Equatable, Comparable { +public struct IPv4Address: Sendable, Hashable, CustomStringConvertible, Equatable, Comparable, Codable { public let value: UInt32 @inlinable diff --git a/Sources/ContainerizationExtras/IPv6Address.swift b/Sources/ContainerizationExtras/IPv6Address.swift index e7e82caa..739d846e 100644 --- a/Sources/ContainerizationExtras/IPv6Address.swift +++ b/Sources/ContainerizationExtras/IPv6Address.swift @@ -15,7 +15,7 @@ //===----------------------------------------------------------------------===// /// Represents an IPv6 network address conforming to RFC 5952 and RFC 4291. -public struct IPv6Address: Sendable, Hashable, CustomStringConvertible, Equatable, Comparable { +public struct IPv6Address: Sendable, Hashable, CustomStringConvertible, Equatable, Comparable, Codable { @usableFromInline internal let value: UInt128 diff --git a/Sources/ContainerizationExtras/Prefix.swift b/Sources/ContainerizationExtras/Prefix.swift index b067fba4..c565b9d1 100644 --- a/Sources/ContainerizationExtras/Prefix.swift +++ b/Sources/ContainerizationExtras/Prefix.swift @@ -16,7 +16,7 @@ /// CIDR prefix length (e.g., `/24` for a 24-bit network mask). @frozen -public struct Prefix: Sendable, CustomStringConvertible, Hashable { +public struct Prefix: Sendable, CustomStringConvertible, Hashable, Codable { public let length: UInt8 /// Create a prefix (0-128). Use `ipv4(_:)` or `ipv6(_:)` for version-specific validation.