vld-tauri
Tauri validation for the vld validation library.
Zero dependency on tauri itself — only vld + serde + serde_json.
Add tauri separately in your app.
What can be validated
| Area | Function / Type | Description |
|---|---|---|
| IPC commands | validate(), VldPayload<T> |
Validate #[tauri::command] arguments |
| Events | validate_event(), VldEvent<T> |
Validate emit()/listen() payloads |
| App state | validate_state() |
Validate config/state before app.manage() |
| Plugin config | validate_plugin_config() |
Validate plugin JSON configuration |
| Channels | validate_channel_message() |
Validate outgoing Channel::send() data |
| Raw JSON | validate_args() |
Validate a raw JSON string |
| Error type | VldTauriError |
Serializable error for command results |
Installation
[]
= "0.1"
= "0.1"
= "2"
= "1"
IPC Commands
Pattern 1 — Explicit Validation (recommended)
use *;
schema!
Pattern 2 — Auto-Validated Payload
VldPayload<T> validates during deserialization. Fields accessible via Deref.
Event Payloads
use Listener;
// Explicit validation
app.listen;
// Auto-validation via VldEvent<T>
app.listen;
State Validation at Init
let config_json = read_to_string?;
let config = .expect;
app.manage;
Plugin Config Validation
let plugin_cfg: Value = /* from tauri.conf.json */;
let cfg =
.expect;
Channel Messages
Error Format
VldTauriError implements Serialize, so Tauri returns it directly:
Frontend Usage (TypeScript)
import { invoke } from '@tauri-apps/api/core';
interface VldError {
error: string;
issues: Array<{ path: string; message: string }>;
}
try {
const result = await invoke('create_user', {
payload: { name: 'Alice', email: 'alice@example.com' }
});
} catch (err) {
const vldErr = err as VldError;
for (const issue of vldErr.issues) {
console.error(`${issue.path}: ${issue.message}`);
}
}
License
MIT