1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rustのvalidatorとthiserrorを使ってみる

Posted at

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: 一文字以上五文字以内にしてください
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?