Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Strings

The StringType can be used to represent a sequence of bytes, you know, a string.

#![allow(unused)]
fn main() {
use schematic::{Schematic, Schema, SchemaBuilder, SchemaType, schema::{StringType, IntegerKind}};

impl Schematic for T {
	fn build_schema(mut schema: SchemaBuilder) -> Schema {
		schema.string_default()
	}
}
}

Automatically implemented for char, str, String, Path, PathBuf, IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, and SocketAddrV6.

SystemTime and Duration are not strings. Serde encodes them as maps — { secs, nanos } and { secs_since_epoch, nanos_since_epoch } — so they model as structs.

Default value

To customize the default value for use within generators, pass the desired value to the StringType constructor.

#![allow(unused)]
fn main() {
schema.string(StringType::new("abc"));
}

Settings

The following fields can be passed to StringType, which are then fed into the generator.

Enumerable

The enum_values field can be used to specify a list of literal values that are allowed for the field.

#![allow(unused)]
fn main() {
StringType {
	// ...
	enum_values: Some(vec!["a".into(), "b".into(), "c".into()]),
}
}

Formats

The format field can be used to associate semantic meaning to the string, and how the string will be used and displayed.

#![allow(unused)]
fn main() {
StringType {
	// ...
	format: Some("url".into()),
}
}

This is primarily used by JSON Schema.

Length

The min_length and max_length fields can be used to restrict the length of the string. Both fields accept a non-zero number, and can be used together or individually.

#![allow(unused)]
fn main() {
StringType {
	// ...
	min_length: Some(1),
	max_length: Some(10),
}
}

Patterns

The pattern field can be used to define a regex pattern that the string must abide by.

#![allow(unused)]
fn main() {
StringType {
	// ...
	format: Some("version".into()),
	pattern: Some("\d+\.\d+\.\d+".into()),
}
}

This is primarily used by JSON Schema.