Skip to content

Commit 72ac4a7

Browse files
ayushi2103“Ayushi
andauthored
ETCD Client Delete Functionality (#5)
* Added delete functionality to ETCD * Fix documentation for delete * Re-add accidental comment that was removed --------- Co-authored-by: “Ayushi <“[email protected]”>
1 parent e254e87 commit 72ac4a7

File tree

6 files changed

+339
-3
lines changed

6 files changed

+339
-3
lines changed

Sources/ETCD/ETCDClient.swift

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,26 @@ public final class EtcdClient: @unchecked Sendable {
8080

8181
/// Fetch the value for a key from the ETCD server.
8282
///
83-
/// - Parameter key: The key to fetch the value for. Parameter is of type Sequence<UInt8>.
83+
/// - Parameter key: The key to fetch the value for. Parameter is of type String.
8484
/// - Returns: A `Value` containing the fetched value, or `nil` if no value was found.
8585
public func get(_ key: String) async throws -> Data? {
8686
return try await get(key.utf8)
8787
}
88+
89+
/// Delete the value for a key from the ETCD server.
90+
///
91+
/// - Parameter key: The key to delete. Parameter is of type Sequence<UInt8>.
92+
public func delete(_ key: some Sequence<UInt8>) async throws {
93+
var deleteRangeRequest = Etcdserverpb_DeleteRangeRequest()
94+
deleteRangeRequest.key = Data(key)
95+
let call = client.deleteRange(deleteRangeRequest)
96+
_ = try await call.response.get()
97+
}
98+
99+
/// Deletes the value for a key from the ETCD server.
100+
///
101+
/// - Parameter key: The key to delete the value for. Parameter is of type String.
102+
public func delete(_ key: String) async throws {
103+
return try await delete(key.utf8)
104+
}
88105
}

Sources/ETCD/proto/etcd.grpc.swift

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ internal protocol Etcdserverpb_KVClientProtocol: GRPCClient {
2525
_ request: Etcdserverpb_PutRequest,
2626
callOptions: CallOptions?
2727
) -> UnaryCall<Etcdserverpb_PutRequest, Etcdserverpb_PutResponse>
28+
29+
func deleteRange(
30+
_ request: Etcdserverpb_DeleteRangeRequest,
31+
callOptions: CallOptions?
32+
) -> UnaryCall<Etcdserverpb_DeleteRangeRequest, Etcdserverpb_DeleteRangeResponse>
2833
}
2934

3035
extension Etcdserverpb_KVClientProtocol {
@@ -69,6 +74,26 @@ extension Etcdserverpb_KVClientProtocol {
6974
interceptors: self.interceptors?.makePutInterceptors() ?? []
7075
)
7176
}
77+
78+
/// DeleteRange deletes the given range from the key-value store.
79+
/// A delete request increments the revision of the key-value store
80+
/// and generates a delete event in the event history for every deleted key.
81+
///
82+
/// - Parameters:
83+
/// - request: Request to send to DeleteRange.
84+
/// - callOptions: Call options.
85+
/// - Returns: A `UnaryCall` with futures for the metadata, status and response.
86+
internal func deleteRange(
87+
_ request: Etcdserverpb_DeleteRangeRequest,
88+
callOptions: CallOptions? = nil
89+
) -> UnaryCall<Etcdserverpb_DeleteRangeRequest, Etcdserverpb_DeleteRangeResponse> {
90+
return self.makeUnaryCall(
91+
path: Etcdserverpb_KVClientMetadata.Methods.deleteRange.path,
92+
request: request,
93+
callOptions: callOptions ?? self.defaultCallOptions,
94+
interceptors: self.interceptors?.makeDeleteRangeInterceptors() ?? []
95+
)
96+
}
7297
}
7398

7499
@available(*, deprecated)
@@ -142,6 +167,11 @@ internal protocol Etcdserverpb_KVAsyncClientProtocol: GRPCClient {
142167
_ request: Etcdserverpb_PutRequest,
143168
callOptions: CallOptions?
144169
) -> GRPCAsyncUnaryCall<Etcdserverpb_PutRequest, Etcdserverpb_PutResponse>
170+
171+
func makeDeleteRangeCall(
172+
_ request: Etcdserverpb_DeleteRangeRequest,
173+
callOptions: CallOptions?
174+
) -> GRPCAsyncUnaryCall<Etcdserverpb_DeleteRangeRequest, Etcdserverpb_DeleteRangeResponse>
145175
}
146176

147177
@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *)
@@ -177,6 +207,18 @@ extension Etcdserverpb_KVAsyncClientProtocol {
177207
interceptors: self.interceptors?.makePutInterceptors() ?? []
178208
)
179209
}
210+
211+
internal func makeDeleteRangeCall(
212+
_ request: Etcdserverpb_DeleteRangeRequest,
213+
callOptions: CallOptions? = nil
214+
) -> GRPCAsyncUnaryCall<Etcdserverpb_DeleteRangeRequest, Etcdserverpb_DeleteRangeResponse> {
215+
return self.makeAsyncUnaryCall(
216+
path: Etcdserverpb_KVClientMetadata.Methods.deleteRange.path,
217+
request: request,
218+
callOptions: callOptions ?? self.defaultCallOptions,
219+
interceptors: self.interceptors?.makeDeleteRangeInterceptors() ?? []
220+
)
221+
}
180222
}
181223

182224
@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *)
@@ -204,6 +246,18 @@ extension Etcdserverpb_KVAsyncClientProtocol {
204246
interceptors: self.interceptors?.makePutInterceptors() ?? []
205247
)
206248
}
249+
250+
internal func deleteRange(
251+
_ request: Etcdserverpb_DeleteRangeRequest,
252+
callOptions: CallOptions? = nil
253+
) async throws -> Etcdserverpb_DeleteRangeResponse {
254+
return try await self.performAsyncUnaryCall(
255+
path: Etcdserverpb_KVClientMetadata.Methods.deleteRange.path,
256+
request: request,
257+
callOptions: callOptions ?? self.defaultCallOptions,
258+
interceptors: self.interceptors?.makeDeleteRangeInterceptors() ?? []
259+
)
260+
}
207261
}
208262

209263
@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *)
@@ -230,6 +284,9 @@ internal protocol Etcdserverpb_KVClientInterceptorFactoryProtocol: Sendable {
230284

231285
/// - Returns: Interceptors to use when invoking 'put'.
232286
func makePutInterceptors() -> [ClientInterceptor<Etcdserverpb_PutRequest, Etcdserverpb_PutResponse>]
287+
288+
/// - Returns: Interceptors to use when invoking 'deleteRange'.
289+
func makeDeleteRangeInterceptors() -> [ClientInterceptor<Etcdserverpb_DeleteRangeRequest, Etcdserverpb_DeleteRangeResponse>]
233290
}
234291

235292
internal enum Etcdserverpb_KVClientMetadata {
@@ -239,6 +296,7 @@ internal enum Etcdserverpb_KVClientMetadata {
239296
methods: [
240297
Etcdserverpb_KVClientMetadata.Methods.range,
241298
Etcdserverpb_KVClientMetadata.Methods.put,
299+
Etcdserverpb_KVClientMetadata.Methods.deleteRange,
242300
]
243301
)
244302

@@ -254,6 +312,12 @@ internal enum Etcdserverpb_KVClientMetadata {
254312
path: "/etcdserverpb.KV/Put",
255313
type: GRPCCallType.unary
256314
)
315+
316+
internal static let deleteRange = GRPCMethodDescriptor(
317+
name: "DeleteRange",
318+
path: "/etcdserverpb.KV/DeleteRange",
319+
type: GRPCCallType.unary
320+
)
257321
}
258322
}
259323

@@ -268,6 +332,11 @@ internal protocol Etcdserverpb_KVProvider: CallHandlerProvider {
268332
/// A put request increments the revision of the key-value store
269333
/// and generates one event in the event history.
270334
func put(request: Etcdserverpb_PutRequest, context: StatusOnlyCallContext) -> EventLoopFuture<Etcdserverpb_PutResponse>
335+
336+
/// DeleteRange deletes the given range from the key-value store.
337+
/// A delete request increments the revision of the key-value store
338+
/// and generates a delete event in the event history for every deleted key.
339+
func deleteRange(request: Etcdserverpb_DeleteRangeRequest, context: StatusOnlyCallContext) -> EventLoopFuture<Etcdserverpb_DeleteRangeResponse>
271340
}
272341

273342
extension Etcdserverpb_KVProvider {
@@ -300,6 +369,15 @@ extension Etcdserverpb_KVProvider {
300369
userFunction: self.put(request:context:)
301370
)
302371

372+
case "DeleteRange":
373+
return UnaryServerHandler(
374+
context: context,
375+
requestDeserializer: ProtobufDeserializer<Etcdserverpb_DeleteRangeRequest>(),
376+
responseSerializer: ProtobufSerializer<Etcdserverpb_DeleteRangeResponse>(),
377+
interceptors: self.interceptors?.makeDeleteRangeInterceptors() ?? [],
378+
userFunction: self.deleteRange(request:context:)
379+
)
380+
303381
default:
304382
return nil
305383
}
@@ -325,6 +403,14 @@ internal protocol Etcdserverpb_KVAsyncProvider: CallHandlerProvider, Sendable {
325403
request: Etcdserverpb_PutRequest,
326404
context: GRPCAsyncServerCallContext
327405
) async throws -> Etcdserverpb_PutResponse
406+
407+
/// DeleteRange deletes the given range from the key-value store.
408+
/// A delete request increments the revision of the key-value store
409+
/// and generates a delete event in the event history for every deleted key.
410+
func deleteRange(
411+
request: Etcdserverpb_DeleteRangeRequest,
412+
context: GRPCAsyncServerCallContext
413+
) async throws -> Etcdserverpb_DeleteRangeResponse
328414
}
329415

330416
@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *)
@@ -364,6 +450,15 @@ extension Etcdserverpb_KVAsyncProvider {
364450
wrapping: { try await self.put(request: $0, context: $1) }
365451
)
366452

453+
case "DeleteRange":
454+
return GRPCAsyncServerHandler(
455+
context: context,
456+
requestDeserializer: ProtobufDeserializer<Etcdserverpb_DeleteRangeRequest>(),
457+
responseSerializer: ProtobufSerializer<Etcdserverpb_DeleteRangeResponse>(),
458+
interceptors: self.interceptors?.makeDeleteRangeInterceptors() ?? [],
459+
wrapping: { try await self.deleteRange(request: $0, context: $1) }
460+
)
461+
367462
default:
368463
return nil
369464
}
@@ -379,6 +474,10 @@ internal protocol Etcdserverpb_KVServerInterceptorFactoryProtocol: Sendable {
379474
/// - Returns: Interceptors to use when handling 'put'.
380475
/// Defaults to calling `self.makeInterceptors()`.
381476
func makePutInterceptors() -> [ServerInterceptor<Etcdserverpb_PutRequest, Etcdserverpb_PutResponse>]
477+
478+
/// - Returns: Interceptors to use when handling 'deleteRange'.
479+
/// Defaults to calling `self.makeInterceptors()`.
480+
func makeDeleteRangeInterceptors() -> [ServerInterceptor<Etcdserverpb_DeleteRangeRequest, Etcdserverpb_DeleteRangeResponse>]
382481
}
383482

384483
internal enum Etcdserverpb_KVServerMetadata {
@@ -388,6 +487,7 @@ internal enum Etcdserverpb_KVServerMetadata {
388487
methods: [
389488
Etcdserverpb_KVServerMetadata.Methods.range,
390489
Etcdserverpb_KVServerMetadata.Methods.put,
490+
Etcdserverpb_KVServerMetadata.Methods.deleteRange,
391491
]
392492
)
393493

@@ -403,5 +503,11 @@ internal enum Etcdserverpb_KVServerMetadata {
403503
path: "/etcdserverpb.KV/Put",
404504
type: GRPCCallType.unary
405505
)
506+
507+
internal static let deleteRange = GRPCMethodDescriptor(
508+
name: "DeleteRange",
509+
path: "/etcdserverpb.KV/DeleteRange",
510+
type: GRPCCallType.unary
511+
)
406512
}
407513
}

0 commit comments

Comments
 (0)