Skip to content

Commit 36043a3

Browse files
authored
Make WordPressAPI supports WP.com (#742)
* Add an initialiser to accept any `ApiUrlResolver` * Export `WpComDotOrgApiUrlResolver`'s `ApiUrlResolver` implementation So that the Swift bindings `WpComDotOrgApiUrlResolver` conforms to the `ApiUrlResolver` protocol.
1 parent b803fb4 commit 36043a3

File tree

5 files changed

+37
-8
lines changed

5 files changed

+37
-8
lines changed

native/swift/Sources/wordpress-api/WordPressAPI.swift

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public actor WordPressAPI {
1919
case unableToParseResponse
2020
}
2121

22+
private let apiUrlResolver: ApiUrlResolver
2223
private let requestExecutor: SafeRequestExecutor
2324
private let apiClientDelegate: WpApiClientDelegate
2425
package let requestBuilder: UniffiWpApiClient
@@ -31,7 +32,7 @@ public actor WordPressAPI {
3132
appNotifier: WpAppNotifier? = nil
3233
) {
3334
self.init(
34-
apiRootUrl: apiRootUrl,
35+
apiUrlResolver: WpOrgSiteApiUrlResolver(apiRootUrl: apiRootUrl),
3536
authenticationProvider: .staticWithAuth(auth: authentication),
3637
executor: WpRequestExecutor(urlSession: urlSession),
3738
middlewarePipeline: middlewarePipeline,
@@ -47,7 +48,23 @@ public actor WordPressAPI {
4748
appNotifier: WpAppNotifier? = nil
4849
) {
4950
self.init(
50-
apiRootUrl: apiRootUrl,
51+
apiUrlResolver: WpOrgSiteApiUrlResolver(apiRootUrl: apiRootUrl),
52+
authenticationProvider: authenticationProvider,
53+
executor: WpRequestExecutor(urlSession: urlSession),
54+
middlewarePipeline: middlewarePipeline,
55+
appNotifier: appNotifier
56+
)
57+
}
58+
59+
public init(
60+
urlSession: URLSession,
61+
apiUrlResolver: ApiUrlResolver,
62+
authenticationProvider: WpAuthenticationProvider,
63+
middlewarePipeline: MiddlewarePipeline = .default,
64+
appNotifier: WpAppNotifier? = nil
65+
) {
66+
self.init(
67+
apiUrlResolver: apiUrlResolver,
5168
authenticationProvider: authenticationProvider,
5269
executor: WpRequestExecutor(urlSession: urlSession),
5370
middlewarePipeline: middlewarePipeline,
@@ -56,20 +73,21 @@ public actor WordPressAPI {
5673
}
5774

5875
init(
59-
apiRootUrl: ParsedUrl,
76+
apiUrlResolver: ApiUrlResolver,
6077
authenticationProvider: WpAuthenticationProvider,
6178
executor: SafeRequestExecutor,
6279
middlewarePipeline: MiddlewarePipeline,
6380
appNotifier: WpAppNotifier?
6481
) {
82+
self.apiUrlResolver = apiUrlResolver
6583
self.apiClientDelegate = WpApiClientDelegate(
6684
authProvider: authenticationProvider,
6785
requestExecutor: executor,
6886
middlewarePipeline: middlewarePipeline,
6987
appNotifier: appNotifier ?? EmptyAppNotifier()
7088
)
7189
self.requestBuilder = UniffiWpApiClient(
72-
apiUrlResolver: WpOrgSiteApiUrlResolver(apiRootUrl: apiRootUrl),
90+
apiUrlResolver: self.apiUrlResolver,
7391
delegate: self.apiClientDelegate
7492
)
7593
self.requestExecutor = executor

native/swift/Tests/wordpress-api/Endpoints/Users.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import Foundation
22
import Testing
33
@testable import WordPressAPI
4+
@testable import WordPressAPIInternal
45

56
struct UsersTests {
67

@@ -39,7 +40,9 @@ struct UsersTests {
3940
])
4041

4142
let api = try WordPressAPI(
42-
apiRootUrl: ParsedUrl.parse(input: "https://wordpress.org/wp-json"),
43+
apiUrlResolver: WpOrgSiteApiUrlResolver(
44+
apiRootUrl: ParsedUrl.parse(input: "https://wordpress.org/wp-json")
45+
),
4346
authenticationProvider: .none(),
4447
executor: stubs,
4548
middlewarePipeline: .default,

native/swift/Tests/wordpress-api/HttpTests.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import Foundation
22
import Testing
33
@testable import WordPressAPI
4+
@testable import WordPressAPIInternal
45

56
class HTTPErrorTests {
67

@@ -9,7 +10,9 @@ class HTTPErrorTests {
910
let stubs = HTTPStubs(stubs: [], missingStub: .failure(URLError(.timedOut)))
1011

1112
let api = try WordPressAPI(
12-
apiRootUrl: ParsedUrl.parse(input: "https://wordpress.org/wp-json"),
13+
apiUrlResolver: WpOrgSiteApiUrlResolver(
14+
apiRootUrl: ParsedUrl.parse(input: "https://wordpress.org/wp-json")
15+
),
1316
authenticationProvider: .none(),
1417
executor: stubs,
1518
middlewarePipeline: .default,

native/swift/Tests/wordpress-api/WordPressAPITests.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,9 @@ struct WordPressAPITests {
4343
func testExample() async throws {
4444
let stubs = try createStubs()
4545
let api = try WordPressAPI(
46-
apiRootUrl: ParsedUrl.parse(input: "https://wordpress.org/wp-json"),
46+
apiUrlResolver: WpOrgSiteApiUrlResolver(
47+
apiRootUrl: ParsedUrl.parse(input: "https://wordpress.org/wp-json")
48+
),
4749
authenticationProvider: .none(),
4850
executor: stubs,
4951
middlewarePipeline: .default,
@@ -58,7 +60,9 @@ struct WordPressAPITests {
5860
let stubs = try createStubs()
5961
let counter = CounterMiddleware()
6062
let api = try WordPressAPI(
61-
apiRootUrl: ParsedUrl.parse(input: "https://wordpress.org/wp-json"),
63+
apiUrlResolver: WpOrgSiteApiUrlResolver(
64+
apiRootUrl: ParsedUrl.parse(input: "https://wordpress.org/wp-json")
65+
),
6266
authenticationProvider: .none(),
6367
executor: stubs,
6468
middlewarePipeline: .init(middlewares: [counter]),

wp_api/src/wp_com/endpoint.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ impl WpComDotOrgApiUrlResolver {
2828
}
2929
}
3030

31+
#[uniffi::export]
3132
impl ApiUrlResolver for WpComDotOrgApiUrlResolver {
3233
fn resolve(&self, namespace: String, endpoint_segments: Vec<String>) -> Arc<ParsedUrl> {
3334
{

0 commit comments

Comments
 (0)