mirror of
https://github.com/garrytan/gstack.git
synced 2026-07-18 13:37:23 +02:00
42 lines
1.5 KiB
Plaintext
42 lines
1.5 KiB
Plaintext
// AUTO-GENERATED from gstack/ios-qa/templates/StateAccessor.swift.template
|
|
// Regenerated by `swift run gen-accessors`. DO NOT EDIT.
|
|
//
|
|
// This file is a TEMPLATE that gen-accessors-tool fills in. The placeholders
|
|
// are filled per-class from swift-syntax AST inspection of the app's
|
|
// @Observable types. Only properties preceded by `// @Snapshotable` are emitted.
|
|
//
|
|
// {{CLASS_NAME}} — the canonical AppState struct name
|
|
// {{APP_BUILD_ID}} — bundle short version + git SHA at codegen time
|
|
// {{ACCESSOR_HASH}} — sha256 of accessor signatures (snapshot schema fingerprint)
|
|
// {{ACCESSORS}} — generated register/read/write blocks per marked field
|
|
|
|
#if DEBUG
|
|
|
|
import Foundation
|
|
|
|
@MainActor
|
|
public enum {{CLASS_NAME}}Accessor {
|
|
|
|
public static func register(_ state: {{CLASS_NAME}}) {
|
|
StateServer.shared.register(
|
|
buildId: "{{APP_BUILD_ID}}",
|
|
accessorHash: "{{ACCESSOR_HASH}}",
|
|
atomicRestore: { keys, apply in
|
|
// Validate every key + type before mutating any state. Invalid
|
|
// input therefore cannot leave a partially restored model.
|
|
var snapshot = state.snapshotable
|
|
{{VALIDATION_BLOCK}}
|
|
// StateServer validates every model first, then invokes the
|
|
// same handlers with apply=true for a cross-model commit.
|
|
if apply {
|
|
state.snapshotable = snapshot
|
|
}
|
|
return .ok
|
|
}
|
|
)
|
|
{{REGISTER_BLOCK}}
|
|
}
|
|
}
|
|
|
|
#endif // DEBUG
|