validatorとは
validatorは構造体にValidationのルールを記載することで簡単にバリデーションを実装できるクレートです。
簡単な使い方
validatorの簡単な使い方です
deriveにValidateを追加して、あとは各プロパティにバリデーションの条件を色々と追加していくだけです。
カスタムバリデーションを追加したい場合は、custom(function = "バリデーション名"で作ることができます。
また、必要な時は構造体のインスタンスに対して.validate()を読んであげるだけで実装が完了します。messageを指定することで、バリデーションが起きた時の文言を変更することもできます。
#[derive(Deserialize, Validate, Debug)]
struct AddParams {
#[validate(
length(min = 1, max = 5, message = "一文字以上五文字以内にしてください"),
custom(function = "validate_unique_username")
)]
text: String,
}
fn validate_unique_username(username: &str) -> Result<(), ValidationError> {
if username == "xXxShad0wxXx" {
// the value of the username will automatically be added later
return Err(ValidationError::new("terrible_username"));
}
Ok(())
}
thiserrorへの登録
前回記事に書いたthiserrorへの登録も簡単です。
と書けば、OKです。
#[error("Validation!!")]
Validation(#[from] validator::ValidationErrors)
また、バリデーションメッセージをそのままエラーとして返したい場合は下記のように書き換えると、プロパティ名: メッセージが表示されます。
#[derive(Deserialize, Validate, Debug)]
struct AddParams {
#[validate(
length(min = 1, max = 5, message = "一文字以上五文字以内にしてください")
)]
text: String,
}
#[derive(Error, Debug)]
enum MyError {
#[error(transparent)]
Validation(#[from] validator::ValidationErrors),
}
// text: 一文字以上五文字以内にしてください