···11+//
22+// ArrayEncodingStrategy.swift
33+// URLQueryItemCoder
44+//
55+66+/// The strategy to use for encoding `Array` values.
77+public enum ArrayEncodingStrategy: Sendable {
88+ /// An array encoding strategy that encodes arrays as indexed keys.
99+ ///
1010+ /// Each element is encoded under a key suffixed with its zero-based index, separated by a dot.
1111+ /// For example, an array `["a", "b"]` at key `"tags"` produces `tags.0=a&tags.1=b`.
1212+ ///
1313+ /// The `ArrayEncodingStrategy.indexed` strategy is the strategy used if you don't specify one.
1414+ case indexed
1515+1616+ /// An array encoding strategy that encodes arrays as repeated keys.
1717+ ///
1818+ /// Each element is encoded under the same key. For example, an array `["a", "b"]` at key `"tags"`
1919+ /// produces `tags=a&tags=b`.
2020+ ///
2121+ /// This is required by protocols such as XRPC (AT Protocol) which expect repeated query parameters
2222+ /// for array values.
2323+ case repeated
2424+2525+ // MARK: Public Static Interface
2626+2727+ /// The default array encoding strategy.
2828+ ///
2929+ /// Equals `.indexed`.
3030+ public static let `default`: ArrayEncodingStrategy = .indexed
3131+}
···99public struct EncodingStrategies {
1010 /// The collection initialized to all default values.
1111 public static let `default` = Self()
1212-1212+1313+ /// The strategy to use for encoding `Array` values.
1414+ public var arrayStrategy: ArrayEncodingStrategy
1515+1316 /// The strategy to use for encoding `Data` values.
1417 public var dataStrategy: DataEncodingStrategy
1515-1818+1619 /// The strategy to use for encoding `Date` values.
1720 public var dateStrategy: DateEncodingStrategy
1818-2121+1922 /// The strategy to use for automatically changing the value of keys before encoding.
2023 public var keyStrategy: KeyEncodingStrategy
2121-2424+2225 /// The strategy to use for non-conforming floating-point values (IEEE 754 infinity and NaN).
2326 public var nonConformingFloatStrategy: NonConformingFloatEncodingStrategy
2424-2727+2528 // MARK: Public Initialization
26292730 /// Creates a new collection of encoding strategies for encoding `Encodable` values.
2831 ///
2932 /// The default encoding strategies are used if none are supplied.
3033 ///
3434+ /// - Parameter arrayStrategy: The strategy to use for encoding `Array` values.
3135 /// - Parameter dataStrategy: The strategy to use for encoding `Data` values.
3236 /// - Parameter dateStrategy: The strategy to use for encoding `Date` values.
3337 /// - Parameter keyStrategy: The strategy to use for encoding keys on keyed containers.
···3539 /// (IEEE 754 infinity and NaN).
3640 /// - Returns: Encoding strategies for encoding `Encodable` values.
3741 public init(
4242+ arrayStrategy: ArrayEncodingStrategy = .default,
3843 dataStrategy: DataEncodingStrategy = .default,
3944 dateStrategy: DateEncodingStrategy = .default,
4045 keyStrategy: KeyEncodingStrategy = .default,
4146 nonConformingFloatStrategy: NonConformingFloatEncodingStrategy = .default
4247 ) {
4848+ self.arrayStrategy = arrayStrategy
4349 self.dataStrategy = dataStrategy
4450 self.dateStrategy = dateStrategy
4551 self.keyStrategy = keyStrategy