gitbay/Repos/RepoSettings.swift
35 lines · 1215 bytes
1import Foundation
2
3/// `repo settings show` — admin-only view of the repo's control knobs.
4/// Every field is omitted at its zero value, so absent means default.
5nonisolated struct RepoSettings: Decodable, Sendable, Hashable {
6 let protectedBranches: [String]?
7 let requireSignedCommits: Bool?
8 let requireChecks: Bool?
9 let requireApprovals: Int?
10 let requireResolved: Bool?
11 let requireCodeowners: Bool?
12 let gitDaemon: Bool?
13 let archived: Bool?
14 let website: String?
15
16 enum CodingKeys: String, CodingKey {
17 case protectedBranches = "protected_branches"
18 case requireSignedCommits = "require_signed_commits"
19 case requireChecks = "require_checks"
20 case requireApprovals = "require_approvals"
21 case requireResolved = "require_resolved"
22 case requireCodeowners = "require_codeowners"
23 case gitDaemon = "git_daemon"
24 case archived, website
25 }
26
27 var branches: [String] { protectedBranches ?? [] }
28}
29
30/// One row of `repo access list`: a user granted read, write or admin.
31nonisolated struct AccessGrant: Decodable, Sendable, Hashable, Identifiable {
32 let user: String
33 let role: String
34 var id: String { user }
35}