-
Notifications
You must be signed in to change notification settings - Fork 221
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1444 from microsoft/feature/swift
swift support
- Loading branch information
Showing
52 changed files
with
1,053 additions
and
44 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
name: Swift abstractions | ||
|
||
on: | ||
workflow_dispatch: | ||
push: | ||
branches: [ main ] | ||
paths: ['abstractions/swift/**', '.github/workflows/**'] | ||
pull_request: | ||
paths: ['abstractions/swift/**', '.github/workflows/**'] | ||
|
||
jobs: | ||
build: | ||
runs-on: ubuntu-latest | ||
env: | ||
relativePath: ./abstractions/swift | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- uses: fwal/setup-swift@v1 | ||
with: | ||
swift-version: '5.6.0' | ||
- name: Build SDK project | ||
run: swift build | ||
working-directory: ${{ env.relativePath }} | ||
- name: Run unit tests | ||
run: swift test | ||
working-directory: ${{ env.relativePath }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
.DS_Store | ||
/.build | ||
/Packages | ||
/*.xcodeproj | ||
xcuserdata/ | ||
DerivedData/ | ||
.swiftpm/config/registries.json | ||
.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata | ||
.netrc |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
Pod::Spec.new do |s| | ||
s.name = "MicrosoftKiotaAbstractions" | ||
s.version = "1.0.0" | ||
s.summary = "MicrosoftKiotaAbstractions provides the base infrastructure for the Kiota-generated SDKs to function. | ||
It defines multiple concepts related to abstract HTTP requests, serialization, and authentication. | ||
These concepts can then be implemented independently without tying the SDKs to any specific implementation. | ||
Kiota also provides default implementations for these concepts." | ||
s.homepage = "https://github.com/microsoft/kiota" | ||
s.license = { :type => "MIT" } | ||
s.authors = { "Microsoft" => "[email protected]" } | ||
|
||
s.requires_arc = true | ||
s.swift_version = "5.0" | ||
s.osx.deployment_target = "10.9" | ||
s.ios.deployment_target = "9.0" | ||
s.watchos.deployment_target = "3.0" | ||
s.tvos.deployment_target = "9.0" | ||
s.source = { :git => "https://github.com/microsoft/kiota.git", :tag => s.version } | ||
s.source_files = "Source/*.swift" | ||
end |
10 changes: 10 additions & 0 deletions
10
abstractions/swift/MicrosoftKiotaAbstractions.xcworkspace/contents.xcworkspacedata
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
{ | ||
"object": { | ||
"pins": [ | ||
{ | ||
"package": "PathKit", | ||
"repositoryURL": "https://github.com/kylef/PathKit.git", | ||
"state": { | ||
"branch": null, | ||
"revision": "3bfd2737b700b9a36565a8c94f4ad2b050a5e574", | ||
"version": "1.0.1" | ||
} | ||
}, | ||
{ | ||
"package": "Spectre", | ||
"repositoryURL": "https://github.com/kylef/Spectre.git", | ||
"state": { | ||
"branch": null, | ||
"revision": "26cc5e9ae0947092c7139ef7ba612e34646086c7", | ||
"version": "0.10.1" | ||
} | ||
}, | ||
{ | ||
"package": "URITemplate", | ||
"repositoryURL": "https://github.com/kylef/URITemplate.swift.git", | ||
"state": { | ||
"branch": null, | ||
"revision": "a309673fdf86e4919a0250730e461ac533a03b3a", | ||
"version": "3.0.1" | ||
} | ||
} | ||
] | ||
}, | ||
"version": 1 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
// swift-tools-version:5.0 | ||
import PackageDescription | ||
|
||
let package = Package( | ||
name: "MicrosoftKiotaAbstractions", | ||
products: [ | ||
.library(name: "MicrosoftKiotaAbstractions", targets: ["MicrosoftKiotaAbstractions"]) | ||
], | ||
dependencies: [ | ||
.package(url: "https://github.com/kylef/URITemplate.swift.git", from: "3.0.0") | ||
], | ||
targets: [ | ||
.target(name: "MicrosoftKiotaAbstractions", dependencies: ["URITemplate"]), | ||
.testTarget(name: "MicrosoftKiotaAbstractionsTests", dependencies: ["MicrosoftKiotaAbstractions"]) | ||
], | ||
swiftLanguageVersions: [.v5] | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
# Uncomment the next line to define a global platform for your project | ||
platform :ios, '9.0' | ||
|
||
target 'MicrosoftKiotaAbstractions' do | ||
# Comment the next line if you don't want to use dynamic frameworks | ||
use_frameworks! | ||
|
||
# Pods for MicrosoftKiotaAbstractions | ||
pod 'URITemplate' | ||
|
||
target 'MicrosoftKiotaAbstractionsTests' do | ||
# Pods for testing | ||
end | ||
|
||
end | ||
|
||
target 'MicrosoftKiotaAbstractionsPackageDescription' do | ||
# Comment the next line if you don't want to use dynamic frameworks | ||
use_frameworks! | ||
|
||
# Pods for MicrosoftKiotaAbstractionsPackageDescription | ||
|
||
end |
33 changes: 33 additions & 0 deletions
33
abstractions/swift/Source/MicrosoftKiotaAbstractions/ApiClientBuilder.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
public class ApiClientBuilder { | ||
private init() { | ||
|
||
} | ||
private static let defaultSerializationWriterFactoryInstanceIntl = SerializationWriterFactoryRegistry() | ||
public static var defaultSerializationWriterFactoryInstance: SerializationWriterFactory { | ||
get { | ||
return defaultSerializationWriterFactoryInstanceIntl | ||
} | ||
} | ||
public static func registerDefaultSerializer(metaFactory: () -> SerializationWriterFactory) { | ||
let factory = metaFactory() | ||
if let contentType = try? factory.getValidContentType() { | ||
if contentType != "" { | ||
defaultSerializationWriterFactoryInstanceIntl.contentTypeAssociatedFactories[contentType] = factory | ||
} | ||
} | ||
} | ||
private static let defaultParseNodeFactoryInstanceIntl = ParseNodeFactoryRegistry() | ||
public static var defaultParseNodeFactoryInstance: ParseNodeFactory { | ||
get { | ||
return defaultParseNodeFactoryInstanceIntl | ||
} | ||
} | ||
public static func registerDefaultParser(metaFactory: () -> ParseNodeFactory) { | ||
let factory = metaFactory() | ||
if let contentType = try? factory.getValidContentType() { | ||
if contentType != "" { | ||
defaultParseNodeFactoryInstanceIntl.contentTypeAssociatedFactories[contentType] = factory | ||
} | ||
} | ||
} | ||
} |
3 changes: 3 additions & 0 deletions
3
abstractions/swift/Source/MicrosoftKiotaAbstractions/ApiError.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
public enum ApiError: Error { | ||
case unknownError(String, Any? = nil) | ||
} |
6 changes: 6 additions & 0 deletions
6
...ractions/swift/Source/MicrosoftKiotaAbstractions/Authentication/AccessTokenProvider.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
import Foundation | ||
|
||
public protocol AccessTokenProvider { | ||
func getAuthenticationToken(url: URL) async throws -> String? | ||
var allowedHostsValidator: AllowedHostsValidator { get } | ||
} |
25 changes: 25 additions & 0 deletions
25
...ctions/swift/Source/MicrosoftKiotaAbstractions/Authentication/AllowedHostsValidator.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
import Foundation | ||
public class AllowedHostsValidator { | ||
private var validHostsIntl = Set<String>() | ||
public init(validHosts: [String]) { | ||
self.validHosts = validHosts; | ||
} | ||
public var validHosts: [String] { get { | ||
return Array(validHostsIntl) | ||
|
||
} set (validHosts) { | ||
self.validHostsIntl = Set(validHosts.map { $0.lowercased() }) | ||
}} | ||
public func isUrlHostValid(url: URL) -> Bool { | ||
if let host = url.host { | ||
return validHostsIntl.contains(host.lowercased()) | ||
} | ||
return false | ||
} | ||
} | ||
public let isSchemeHttps = { (url: URL) -> Bool in | ||
if let scheme = url.scheme { | ||
return scheme.lowercased() == "https" | ||
} | ||
return false | ||
} |
5 changes: 5 additions & 0 deletions
5
...ft/Source/MicrosoftKiotaAbstractions/Authentication/AnonymousAuthenticationProvider.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
public class AnonymousAuthenticationProvider : AuthenticationProvider { | ||
public func authenticateRequest(request: RequestInformation) async throws { | ||
// Do nothing | ||
} | ||
} |
3 changes: 3 additions & 0 deletions
3
...tions/swift/Source/MicrosoftKiotaAbstractions/Authentication/AuthenticationProvider.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
public protocol AuthenticationProvider { | ||
func authenticateRequest(request: RequestInformation) async throws | ||
} |
22 changes: 22 additions & 0 deletions
22
...t/Source/MicrosoftKiotaAbstractions/Authentication/BaseBearerAuthenticationProvider.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
public class BaseBearerAuthenticationProvider : AuthenticationProvider { | ||
public init (accessTokenProvider: AccessTokenProvider) { | ||
accessTokenProviderIntl = accessTokenProvider | ||
} | ||
private var accessTokenProviderIntl: AccessTokenProvider | ||
public var accessTokenProvider: AccessTokenProvider { | ||
get { | ||
return accessTokenProviderIntl | ||
} | ||
} | ||
public let authorizationHeaderKey = "Authorization" | ||
public let authorizationHeaderValuePrefix = "Bearer " | ||
public func authenticateRequest(request: RequestInformation) async throws { | ||
if request.headers[authorizationHeaderKey] == nil { | ||
let url = try request.getUri() | ||
let tokenResult = try? await accessTokenProvider.getAuthenticationToken(url: url) | ||
if let token = tokenResult { | ||
request.headers[authorizationHeaderKey] = authorizationHeaderValuePrefix + token | ||
} | ||
} | ||
} | ||
} |
11 changes: 11 additions & 0 deletions
11
abstractions/swift/Source/MicrosoftKiotaAbstractions/HttpMethod.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
public enum HttpMethod { | ||
case get | ||
case post | ||
case patch | ||
case delete | ||
case options | ||
case connect | ||
case put | ||
case trace | ||
case head | ||
} |
11 changes: 11 additions & 0 deletions
11
abstractions/swift/Source/MicrosoftKiotaAbstractions/RequestAdapter.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
public typealias ErrorMappings = [String:ParsableFactory] | ||
public typealias ResponseHandler<DeserializationType> = (Any, ErrorMappings) async throws -> DeserializationType | ||
public protocol RequestAdapter { | ||
func send<T:Parsable>(request: RequestInformation, ctor: ParsableFactory, responseHandler: ResponseHandler<T>?, errorMappings: ErrorMappings?) async throws -> T? | ||
func sendCollection<T:Parsable>(request: RequestInformation, ctor: ParsableFactory, responseHandler: ResponseHandler<T>?, errorMappings: ErrorMappings?) async throws -> [T]? | ||
func sendPrimitive<T>(request: RequestInformation, responseHandler: ResponseHandler<T>?, errorMappings: ErrorMappings?) async throws -> T? | ||
func sendNoContent(request: RequestInformation, responseHandler: ResponseHandler<Void>?, errorMappings: ErrorMappings?) async throws -> Void | ||
func enableBackingStore() throws | ||
var baseUrl: String { get set } | ||
var serializationWriterFactory: SerializationWriterFactory { get } | ||
} |
Oops, something went wrong.