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
|
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2021-2022 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
//
//===----------------------------------------------------------------------===//
/// Participants engage in a number of exercises.
///
/// Default implementations will throw `Unsupported`.
/// Opt-in for cross-library comparisons, testing, and benchmarking by overriding the corresponding functions.
///
public protocol Participant {
static var name: String { get }
// Produce a function that will parse a grapheme break entry from a line
static func graphemeBreakProperty() throws -> (String) -> GraphemeBreakEntry?
// Produce a function that will extract the bodies of C-style comments from its input
static func cComments() throws -> (String) -> [Substring]
// Produce a function that will extract the bodies of Swift-style comments from its input
static func swiftComments() throws -> (String) -> [Substring]
// ...
}
// Errors that may be thrown from default implementations
private enum ParticipantError: Error {
case unsupported
}
// Default impls
extension Participant {
// Produce a function that will parse a grapheme break entry from a line
public static func graphemeBreakProperty() throws -> (String) -> GraphemeBreakEntry? {
throw ParticipantError.unsupported
}
// Produce a function that will extract the bodies of C-style comments from its input
public static func cComments() throws -> (String) -> [Substring] {
throw ParticipantError.unsupported
}
// Produce a function that will extract the bodies of Swift-style comments from its input
public static func swiftComments() throws -> (String) -> [Substring] {
throw ParticipantError.unsupported
}
}
|