Crate ini_core

Source
Expand description

§Ini streaming parser

Simple, straight forward, super fast, no_std compatible streaming INI parser.

§Examples

use ini_core as ini;

let document = "\
[SECTION]
;this is a comment
Key=Value";

let elements = [
	ini::Item::SectionEnd,
	ini::Item::Section("SECTION"),
	ini::Item::Comment("this is a comment"),
	ini::Item::Property("Key", Some("Value")),
	ini::Item::SectionEnd,
];

for (index, item) in ini::Parser::new(document).enumerate() {
	assert_eq!(item, elements[index]);
}

The SectionEnd pseudo element is returned before a new section and at the end of the document. This helps processing sections after their properties finished parsing.

The parser is very much line-based, it will continue no matter what and return nonsense as an item:

use ini_core as ini;

let document = "\
[SECTION
nonsense";

let elements = [
	ini::Item::SectionEnd,
	ini::Item::Error("[SECTION"),
	ini::Item::Property("nonsense", None),
	ini::Item::SectionEnd,
];

for (index, item) in ini::Parser::new(document).enumerate() {
	assert_eq!(item, elements[index]);
}

Lines starting with [ but contain either no closing ] or a closing ] not followed by a newline are returned as Item::Error. Lines missing a = are returned as Item::Property with None value. See below for more details.

§Format

INI is not a well specified format, this parser tries to make as little assumptions as possible but it does make decisions.

  • Newline is either "\r\n", "\n" or "\r". It can be mixed in a single document but this is not recommended.
  • Section header is "[" section "]" newline. section can be anything except contain newlines.
  • Property is key "=" value newline. key and value can be anything except contain newlines.
  • Comment is ";" comment newline and Blank is just newline. The comment character can be customized.

Note that padding whitespace is not trimmed by default:

  • Section [ SECTION ]’s name is <space>SECTION<space>.
  • Property KEY = VALUE has key KEY<space> and value <space>VALUE.
  • Comment ; comment’s comment is <space>comment.

No further processing of the input is done, eg. if escape sequences are necessary they must be processed by the caller.

Structs§

Enums§

Functions§

  • Trims ascii whitespace from the start and end of the string slice.