// 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
