Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit8b3ee9b

Browse files
committed
add custom header support
1 parent84936d0 commit8b3ee9b

File tree

3 files changed

+35
-30
lines changed

3 files changed

+35
-30
lines changed

‎Coder Desktop/CoderSDK/Client.swift

Lines changed: 25 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@ import Foundation
33
publicstructClient{
44
publicleturl:URL
55
publicvartoken:String?
6+
publicvarheaders:[HTTPHeader]
67

7-
publicinit(url:URL, token:String?=nil){
8+
publicinit(url:URL, token:String?=nil, headers:[HTTPHeader]=[]){
89
self.url= url
910
self.token= token
11+
self.headers= headers
1012
}
1113

1214
staticletdecoder:JSONDecoder={
@@ -21,20 +23,17 @@ public struct Client {
2123
return enc
2224
}()
2325

24-
funcrequest<T:Encodable&Sendable>(
25-
_path:String,
26+
privatefuncdoRequest(
27+
path:String,
2628
method:HTTPMethod,
27-
body:T?=nil
29+
body:Data?=nil
2830
)asyncthrows(ClientError)->HTTPResponse{
2931
leturl=self.url.appendingPathComponent(path)
3032
varreq=URLRequest(url: url)
3133
iflet token{ req.addValue(token, forHTTPHeaderField:Headers.sessionToken)}
3234
req.httpMethod= method.rawValue
33-
do{
34-
iflet body{ req.httpBody=tryClient.encoder.encode(body)}
35-
}catch{
36-
throw.encodeFailure
37-
}
35+
forheaderin headers{ req.addValue(header.value, forHTTPHeaderField: header.header)}
36+
req.httpBody= body
3837
letdata:Data
3938
letresp:URLResponse
4039
do{
@@ -48,25 +47,25 @@ public struct Client {
4847
returnHTTPResponse(resp: httpResponse, data: data, req: req)
4948
}
5049

51-
func request(
50+
func request<T:Encodable&Sendable>(
5251
_ path:String,
53-
method:HTTPMethod
52+
method:HTTPMethod,
53+
body:T
5454
)asyncthrows(ClientError)->HTTPResponse{
55-
leturl=self.url.appendingPathComponent(path)
56-
varreq=URLRequest(url: url)
57-
iflet token{ req.addValue(token, forHTTPHeaderField:Headers.sessionToken)}
58-
req.httpMethod= method.rawValue
59-
letdata:Data
60-
letresp:URLResponse
55+
letencodedBody:Data?
6156
do{
62-
(data, resp)=tryawaitURLSession.shared.data(for: req)
57+
encodedBody=tryClient.encoder.encode(body)
6358
}catch{
64-
throw.network(error)
59+
throw.encodeFailure(error)
6560
}
66-
guardlet httpResponse= respas?HTTPURLResponseelse{
67-
throw.unexpectedResponse(data)
68-
}
69-
returnHTTPResponse(resp: httpResponse, data: data, req: req)
61+
returntryawaitdoRequest(path: path, method: method, body: encodedBody)
62+
}
63+
64+
func request(
65+
_ path:String,
66+
method:HTTPMethod
67+
)asyncthrows(ClientError)->HTTPResponse{
68+
returntryawaitdoRequest(path: path, method: method)
7069
}
7170

7271
func responseAsError(_ resp:HTTPResponse)->ClientError{
@@ -119,7 +118,7 @@ public enum ClientError: Error {
119118
case api(APIError)
120119
case network(anyError)
121120
case unexpectedResponse(Data)
122-
case encodeFailure
121+
case encodeFailure(anyError)
123122

124123
publicvardescription:String{
125124
switchself{
@@ -129,8 +128,8 @@ public enum ClientError: Error {
129128
return error.localizedDescription
130129
caselet.unexpectedResponse(data):
131130
return"Unexpected or non HTTP response:\(data)"
132-
case.encodeFailure:
133-
return"Failed to encode body"
131+
caselet.encodeFailure(error):
132+
return"Failed to encode body:\(error)"
134133
}
135134
}
136135
}

‎Coder Desktop/CoderSDK/HTTP.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ public struct HTTPResponse {
44
letreq:URLRequest
55
}
66

7+
publicstructHTTPHeader{
8+
letheader:String
9+
letvalue:String
10+
}
11+
712
enumHTTPMethod:String,Equatable,Hashable,Sendable{
813
case get="GET"
914
case post="POST"

‎Coder Desktop/CoderSDKTests/CoderSDKTests.swift

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,23 @@ struct CoderSDKTests {
2727

2828
leturl=URL(string:"https://example.com")!
2929
lettoken="fake-token"
30-
letclient=Client(url: url, token: token)
30+
letclient=Client(url: url, token: token, headers:[.init(header:"X-Test-Header", value:"foo")])
3131
varmock=tryMock(
3232
url: url.appending(path:"api/v2/users/johndoe"),
3333
contentType:.json,
3434
statusCode:200,
3535
data:[.get:Client.encoder.encode(user)]
3636
)
37-
vartokenSent=false
37+
varcorrectHeaders=false
3838
mock.onRequestHandler=OnRequestHandler{ reqin
39-
tokenSent= req.value(forHTTPHeaderField:Headers.sessionToken)== token
39+
correctHeaders= req.value(forHTTPHeaderField:Headers.sessionToken)== token &&
40+
req.value(forHTTPHeaderField:"X-Test-Header")=="foo"
4041
}
4142
mock.register()
4243

4344
letretUser=tryawait client.user(user.username)
4445
#expect(user== retUser)
45-
#expect(tokenSent)
46+
#expect(correctHeaders)
4647
}
4748

4849
@Test

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp