Skip to content

Commit

Permalink
add CodingKey to SortEncoder
Browse files Browse the repository at this point in the history
  • Loading branch information
tayloraswift committed Jun 23, 2024
1 parent 7400dd6 commit 272a316
Show file tree
Hide file tree
Showing 29 changed files with 236 additions and 178 deletions.
8 changes: 4 additions & 4 deletions Snippets/ExampleAccumulators.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ func ExampleAccumulators()
$0[.top] = .init
{
$0[.output] = "$field"
$0[.by] = .init
$0[.by, using: Mongo.AnyKeyPath.self]
{
$0["x"] = (+)
$0["y"] = (-)
Expand All @@ -20,8 +20,8 @@ func ExampleAccumulators()
$0[.top] = .init
{
$0[.output] = "$field"
$0[.count] = 5
$0[.by] = .init
$0[.n] = 5
$0[.by, using: Mongo.AnyKeyPath.self]
{
$0["x"] = (+)
$0["y"] = (-)
Expand All @@ -33,7 +33,7 @@ func ExampleAccumulators()
$0[.first] = .init
{
$0[.input] = "$field"
$0[.count] = 5
$0[.n] = 5
}
}
let _:Mongo.Accumulator = .init
Expand Down
2 changes: 1 addition & 1 deletion Snippets/ExampleExpressions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,7 @@ func ExampleExpressions()
$0[.sortArray] = .init
{
$0[.input] = "$field"
$0[.by] = .init
$0[.by, using: Mongo.AnyKeyPath.self]
{
$0["x"] = (+)
$0["y"] = (-)
Expand Down
8 changes: 8 additions & 0 deletions Sources/MongoBuiltins/Accumulators/Mongo.Accumulator.N.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
extension Mongo.Accumulator
{
@frozen public
enum N:String, Sendable
{
case n
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,14 @@ extension Mongo.Accumulator
}
extension Mongo.Accumulator.SuperlativeDocument
{
@frozen public
enum Input:String, Sendable
{
case input
}

@inlinable public
subscript<Encodable>(key:Mongo.SortDocument.Input) -> Encodable?
subscript<Encodable>(key:Input) -> Encodable?
where Encodable:BSONEncodable
{
get
Expand All @@ -30,8 +36,11 @@ extension Mongo.Accumulator.SuperlativeDocument
value?.encode(to: &self.bson[with: key])
}
}
}
extension Mongo.Accumulator.SuperlativeDocument
{
@inlinable public
subscript<Encodable>(key:Mongo.SortDocument.Count) -> Encodable?
subscript<Encodable>(key:Mongo.Accumulator.N) -> Encodable?
where Encodable:BSONEncodable
{
get
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,36 +17,48 @@ extension Mongo.Accumulator
}
extension Mongo.Accumulator.SuperlativeSortDocument
{
@available(*, unavailable)
@inlinable public
subscript(key:Mongo.SortDocument.By) -> Mongo.SortDocument?
subscript(key:Mongo.SortBy) -> Mongo.SortDocument<Mongo.AnyKeyPath>?
{
get
{
nil
}
set(value)
nil
}

@inlinable public
subscript<CodingKey>(key:Mongo.SortBy,
using _:CodingKey.Type = CodingKey.self,
yield:(inout Mongo.SortEncoder<CodingKey>) -> ()) -> Void
{
mutating get
{
value?.encode(to: &self.bson[with: key])
yield(&self.bson[with: key][as: Mongo.SortEncoder<CodingKey>.self])
}
}
}
extension Mongo.Accumulator.SuperlativeSortDocument
{
@frozen public
enum Output:String, Hashable, Sendable
{
case output
}

@inlinable public
subscript<Encodable>(key:Mongo.SortDocument.Output) -> Encodable?
subscript<Encodable>(key:Output) -> Encodable?
where Encodable:BSONEncodable
{
get
{
nil
}
set(value)
get { nil }
set (value)
{
value?.encode(to: &self.bson[with: key])
}
}
}
extension Mongo.Accumulator.SuperlativeSortDocument<Mongo.SortDocument.Count>
extension Mongo.Accumulator.SuperlativeSortDocument<Mongo.Accumulator.N>
{

@inlinable public
subscript<Encodable>(key:Mongo.SortDocument.Count) -> Encodable?
subscript<Encodable>(key:Mongo.Accumulator.N) -> Encodable?
where Encodable:BSONEncodable
{
get
Expand Down
2 changes: 1 addition & 1 deletion Sources/MongoBuiltins/Accumulators/Mongo.Accumulator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ extension Mongo.Accumulator
}
@_disfavoredOverload
@inlinable public
subscript(key:SuperlativeSort) -> SuperlativeSortDocument<Mongo.SortDocument.Count>?
subscript(key:SuperlativeSort) -> SuperlativeSortDocument<N>?
{
get
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
extension Mongo.SortDocument
extension Mongo
{
@frozen public
enum By:String, Hashable, Sendable
enum SortBy:String, Hashable, Sendable
{
case by = "sortBy"
}
}
extension Mongo.SortDocument.By
extension Mongo.SortBy
{
@available(*, unavailable, renamed: "by")
public static
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

4 changes: 2 additions & 2 deletions Sources/MongoBuiltins/Documents/Sort/Mongo.SortDocument.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import MongoABI
extension Mongo
{
@frozen public
struct SortDocument:Sendable
struct SortDocument<CodingKey>:Sendable where CodingKey:RawRepresentable<String>
{
public
var bson:BSON.Document
Expand All @@ -19,5 +19,5 @@ extension Mongo
extension Mongo.SortDocument:Mongo.EncodableDocument
{
public
typealias Encoder = Mongo.SortEncoder
typealias Encoder = Mongo.SortEncoder<CodingKey>
}
16 changes: 8 additions & 8 deletions Sources/MongoBuiltins/Documents/Sort/Mongo.SortEncoder.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@ import MongoABI
extension Mongo
{
@frozen public
struct SortEncoder:Sendable
struct SortEncoder<CodingKey>:Sendable where CodingKey:RawRepresentable<String>
{
@usableFromInline
var bson:BSON.DocumentEncoder<Mongo.AnyKeyPath>
var bson:BSON.DocumentEncoder<CodingKey>

@inlinable internal
init(bson:BSON.DocumentEncoder<Mongo.AnyKeyPath>)
init(bson:BSON.DocumentEncoder<CodingKey>)
{
self.bson = bson
}
Expand All @@ -36,7 +36,7 @@ extension Mongo.SortEncoder
pass the `(+)` or `(-)` operator functions to specify sort direction.
""")
@inlinable public
subscript(path:Mongo.AnyKeyPath) -> Int?
subscript(path:CodingKey) -> Int?
{
get { nil }
set { }
Expand Down Expand Up @@ -67,27 +67,27 @@ extension Mongo.SortEncoder
extension Mongo.SortEncoder
{
@inlinable public
subscript<Direction>(path:Mongo.AnyKeyPath) -> ((Direction) -> Never)?
subscript<Direction>(path:CodingKey) -> ((Direction) -> Never)?
where Direction:Mongo.SortDirection
{
get { nil }
set (value)
{
if case _? = value
{
Direction.code.encode(to: &self.bson[with: path.stem])
Direction.code.encode(to: &self.bson[with: path])
}
}
}
}
extension Mongo.SortEncoder
{
@inlinable public
subscript(path:Mongo.AnyKeyPath, yield:(inout Mongo.SortOperatorEncoder) -> ()) -> Void
subscript(path:CodingKey, yield:(inout Mongo.SortOperatorEncoder) -> ()) -> Void
{
mutating get
{
yield(&self.bson[with: path.stem][as: Mongo.SortOperatorEncoder.self])
yield(&self.bson[with: path][as: Mongo.SortOperatorEncoder.self])
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import BSON
import MongoABI

extension Mongo
{
Expand All @@ -17,8 +18,14 @@ extension Mongo
}
extension Mongo.SortArrayDocument
{
@frozen public
enum Input:String, Sendable
{
case input
}

@inlinable public
subscript<Encodable>(key:Mongo.SortDocument.Input) -> Encodable?
subscript<Encodable>(key:Input) -> Encodable?
where Encodable:BSONEncodable
{
get
Expand All @@ -30,16 +37,22 @@ extension Mongo.SortArrayDocument
value?.encode(to: &self.bson[with: key])
}
}

@inlinable public
subscript(key:Mongo.SortDocument.By) -> Mongo.SortDocument?
subscript<CodingKey>(key:Mongo.SortBy,
using _:CodingKey.Type = CodingKey.self,
yield:(inout Mongo.SortEncoder<CodingKey>) -> ()) -> Void
{
get
mutating get
{
nil
}
set(value)
{
value?.encode(to: &self.bson[with: key])
yield(&self.bson[with: key][as: Mongo.SortEncoder<CodingKey>.self])
}
}

@available(*, unavailable)
@inlinable public
subscript(key:Mongo.SortBy) -> Mongo.SortDocument<Mongo.AnyKeyPath>?
{
nil
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -82,11 +82,13 @@ extension Mongo.UpdateArrayEncoder
}

@inlinable public
subscript(key:Sort, yield:(inout Mongo.SortEncoder) -> ()) -> Void
subscript<CodingKey>(key:Sort,
using _:CodingKey.Type = CodingKey.self,
yield:(inout Mongo.SortEncoder<CodingKey>) -> ()) -> Void
{
mutating get
{
yield(&self.bson[with: key][as: Mongo.SortEncoder.self])
yield(&self.bson[with: key][as: Mongo.SortEncoder<CodingKey>.self])
}
}
}
23 changes: 12 additions & 11 deletions Sources/MongoBuiltins/Pipelines/Mongo.PipelineEncoder.swift
Original file line number Diff line number Diff line change
Expand Up @@ -712,24 +712,25 @@ extension Mongo.PipelineEncoder
extension Mongo.PipelineEncoder
{
@inlinable public
subscript(stage key:Mongo.Pipeline.Sort) -> Mongo.SortDocument?
subscript<CodingKey>(stage sort:Mongo.Pipeline.Sort,
using _:CodingKey.Type = CodingKey.self,
yield:(inout Mongo.SortEncoder<CodingKey>) -> ()) -> Void
{
get { nil }
set (value)
mutating get
{
guard
let value:Mongo.SortDocument
else
{
return
}

self.list(Mongo.Pipeline.Sort.self)
{
$0[.sort] = value
yield(&$0[with: sort][as: Mongo.SortEncoder<CodingKey>.self])
}
}
}

@available(*, unavailable)
@inlinable public
subscript(stage key:Mongo.Pipeline.Sort) -> Mongo.SortDocument<Mongo.AnyKeyPath>?
{
nil
}
}

extension Mongo.PipelineEncoder
Expand Down
Loading

0 comments on commit 272a316

Please sign in to comment.