1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift open source project
//
// Copyright (c) 2020-2023 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
import struct Foundation.Date
import struct Foundation.URL
import PackageModel
import struct TSCUtility.Version
/// `PackageBasicMetadata` provider
protocol PackageMetadataProvider {
/// Retrieves metadata for a package with the given identity and repository address.
///
/// - Parameters:
/// - identity: The package's identity
/// - location: The package's location
/// - callback: The closure to invoke when result becomes available
func get(
identity: PackageIdentity,
location: String,
callback: @escaping (Result<PackageCollectionsModel.PackageBasicMetadata, Error>, PackageMetadataProviderContext?) -> Void
)
}
extension Model {
struct PackageBasicMetadata: Equatable, Codable {
let summary: String?
let keywords: [String]?
let versions: [PackageBasicVersionMetadata]
let watchersCount: Int?
let readmeURL: URL?
let license: PackageCollectionsModel.License?
let authors: [PackageCollectionsModel.Package.Author]?
let languages: Set<String>?
}
struct PackageBasicVersionMetadata: Equatable, Codable {
let version: TSCUtility.Version
let title: String?
let summary: String?
let author: PackageCollectionsModel.Package.Author?
let createdAt: Date?
}
}
public struct PackageMetadataProviderContext: Equatable {
public let name: String
public let authTokenType: AuthTokenType?
public let isAuthTokenConfigured: Bool
public let error: PackageMetadataProviderError?
init(
name: String,
authTokenType: AuthTokenType?,
isAuthTokenConfigured: Bool,
error: PackageMetadataProviderError? = nil
) {
self.name = name
self.authTokenType = authTokenType
self.isAuthTokenConfigured = isAuthTokenConfigured
self.error = error
}
}
public enum PackageMetadataProviderError: Error, Equatable {
case invalidResponse(errorMessage: String)
case permissionDenied
case invalidAuthToken
case apiLimitsExceeded
}
|