Aller au contenu principal
Version: v0.6.0

Champs constants

Un champ constant est un champ exclusif à la sortie dont la valeur est calculée une seule fois, à la création, et n'est jamais acceptée depuis l'entrée ni modifiée par une mise à jour (par ex. id).

  • Déclaré avec #[constant(valeur_ou_résolveur)] -- une valeur statique, ou un résolveur |ctx, opts| -> T (synchrone ou asynchrone, avec accès au contexte et aux options comme tout autre gestionnaire).
  • Nécessite output(...) sur le schéma, puisqu'il n'apparaît jamais sur la struct d'entrée.
  • Peut avoir des gestionnaires d'événements on_delete et on_success.

Exemple​

id est une constante statique. label est calculé une seule fois via un résolveur en closure sans argument :

use ivo::ivo_schema;

#[ivo_schema(
input(ItemInput, derive(Debug, Clone, PartialEq)),
output(Item, derive(Debug, Clone, PartialEq))
)]
mod item_schema {
struct Fields {
#[constant(1234)]
pub id: i32,

#[constant(|| "generated".to_string())]
pub label: String,

#[required]
#[validate(|v: String, _, _| Ok(Some(v)))]
pub name: String,
}
}

fn main() {
let (created, _ctx_options) = item_schema::ItemModel
.create(
item_schema::PartialItemInput {
name: Some("widget".into()),
},
(),
)
.unwrap();

assert_eq!(created.id, 1234);
assert_eq!(created.label, "generated");

println!("{:#?}", created);
// Item { id: 1234, label: "generated", name: "widget" }
}

Une mise à jour de item_schema::PartialItemInput n'a aucun champ id/label -- il n'y a rien à soumettre pour une constante, et aucun moyen de la modifier après la création.

Essayez-le dans le navigateur​

id est une constante (toujours 1234) ; username est lax avec une valeur par défaut. Modifiez l'entrée et exécutez.

Loading playground…