How wibosco/validation-example works
Validation-Example is a SwiftUI demonstration of composable form validation. The user edits registration fields; each field’s view model debounces changes, invokes its validator, and exposes validation state for inline feedback. The registration model combines the email and password states to determine whether submission is allowed; submission itself is omitted in the sample. The app entry point wires the validators, view models, and screen together. Some password and supporting implementation files are represented from the tree, but their source was not sampled.
Main entry points: Validation_ExampleApp.swift App composition · ValidationViewModel.swift Validation model · RegistrationView.swift Registration screen · RegistrationViewModel.swift Registration model
Components 14
Registration UI
- App composition
Validation-Example/Application/Validation_ExampleApp.swift - Registration screen
Validation-Example/Features/Registration/RegistrationView.swift - Input field
Validation-Example/Features/Registration/Validation/ValidationInputField.swift - Registration model
Validation-Example/Features/Registration/RegistrationViewModel.swift
Validation Core
- Validation model
Validation-Example/Features/Registration/Validation/ValidationViewModel.swift - Type erasure
Validation-Example/Features/Registration/Validation/AnyValidationViewModel.swift - Validation state
Validation-Example/Features/Registration/Validation/ValidationState.swift - Debouncer
Validation-Example/Features/Registration/Debouncing/Debouncer.swift
Validation Rules
- Validator contract
Validation-Example/Features/Registration/Validation/Validators/Validator.swift - Email rules
Validation-Example/Features/Registration/Validation/Validators/Custom/EmailAddressValidator.swift - Email errors
Validation-Example/Features/Registration/Validation/Validators/Custom/EmailAddressValidationError.swift - Password rules
Validation-Example/Features/Registration/Validation/Validators/Custom/PasswordValidator.swift - Password errors
Validation-Example/Features/Registration/Validation/Validators/Custom/PasswordValidationError.swift
Other components
- User
Connections 18
- User → Registration screen: edits fields
- App composition → Email rules: creates
- App composition → Password rules: creates
- App composition → Validation model: creates
- App composition → Type erasure: erases types
- App composition → Registration model: creates
- App composition → Registration screen: presents
- Registration screen → Registration model: binds fields
- Registration screen → Input field: renders
- Registration model → Validation state: reads validity
- Registration model → Type erasure: holds view models
- Validation model → Debouncer: submits action
- Debouncer → Validation model: runs action
- Validation model → Validator contract: validates value
- Email rules → Email errors: throws
- Password rules → Password errors: throws
- Validation model → Validation state: updates state
- Input field → Validation state: displays feedback