File: SymbolGraphAvailability%2BFilter.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (39 lines) | stat: -rw-r--r-- 1,502 bytes parent folder | download
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
/*
 This source file is part of the Swift.org open source project

 Copyright (c) 2021 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
 See https://swift.org/CONTRIBUTORS.txt for Swift project authors
*/

import Foundation
import SymbolKit

extension SymbolGraph.Symbol.Availability {
    /// Filters out all the availability items that don't apply to the given platform.
    ///
    /// - Parameter platformName: The platform name to filter availability items for.
    /// - Returns: A new `Availability` with only the items that apply to `platformName`.
    func filterItems(thatApplyTo platformName: PlatformName) -> SymbolGraph.Symbol.Availability {
        var copy = self
        copy.availability = availability.filter { $0.appliesTo(platformName) }
        return copy
    }
}
    
private extension SymbolGraph.Symbol.Availability.AvailabilityItem {
    /// Returns `true` if the `AvailabilityItem` applies to a given platform.
    ///
    /// - Parameter platformName: The platform name to check if the item applies to.
    /// - Returns: If the item applies to the platform or not.
    func appliesTo(_ platformName: PlatformName) -> Bool {
        if let domain {
            return PlatformName(operatingSystemName: domain.rawValue) == platformName
        } else {
            // Items without a domain apply to all platforms
            return true
        }
    }
}