-
-
Notifications
You must be signed in to change notification settings - Fork 1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
examples: add custom validator example
- Loading branch information
Showing
1 changed file
with
36 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
extern crate clap; | ||
|
||
use clap::{App, Arg}; | ||
|
||
fn main() { | ||
// You can define a function (or a closure) to use as a validator to argument values. The | ||
// function must accept a String and return Result<(), String> where Err(String) is the message | ||
// displayed to the user. | ||
|
||
let matches = App::new("myapp") | ||
// Application logic goes here... | ||
.arg(Arg::with_name("input") | ||
.help("the input file to use") | ||
.index(1) | ||
.required(true) | ||
|
||
.validator(|val| { | ||
// val is the argument value passed in by the user | ||
// val has type of String. | ||
|
||
if val.ends_with(".png") { | ||
Ok(()) | ||
} else { | ||
// clap automatically adds "error: " to the beginning | ||
// of the message. | ||
Err(String::from("the file format must be png.")) | ||
} | ||
|
||
// Of course, you can do more complicated validation as | ||
// well, but for the simplicity, this example only checks | ||
// if the value passed in ends with ".png" or not. | ||
})) | ||
.get_matches(); | ||
|
||
// Continued program logic here... | ||
} |