5 releases

new 0.3.1 Jan 18, 2025
0.3.0 Dec 24, 2024
0.2.2 Dec 15, 2024
0.2.1 Dec 15, 2024
0.2.0 Nov 28, 2024

#104 in Configuration

Download history 130/week @ 2024-11-23 34/week @ 2024-11-30 10/week @ 2024-12-07 422/week @ 2024-12-14 412/week @ 2024-12-21 285/week @ 2024-12-28 321/week @ 2025-01-04 398/week @ 2025-01-11

1,468 downloads per month

MIT license

82KB
1.5K SLoC

raugeas

crates.io CI

Rust binding for Augeas, a configuration editing tool.

These crates were initially forked from hercules-team/rust-augeas.

Requirements

  • Augeas >= 1.13.0
  • MSRV: 1.77.0

Design

This library is a low-level binding to the C API of Augeas, with a few abstractions to make it more idiomatic to use in Rust. It does not aim to provide a high-level API to manipulate configuration files, but rather to provide a safe and idiomatic way to interact with Augeas.


lib.rs:

Augeas bindings for Rust

Augeas is a library for reading, modifying, and writing a structured file, like configuration files.

This library is a low-level binding to the C API of Augeas, with a few abstractions to make it more idiomatic to use in Rust. It does not aim to provide a high-level API to manipulate configuration files, but rather to provide a safe and idiomatic way to interact with Augeas.

The main differences with the C API are:

  • Add clear and clearm methods clear values (instead of passing an Option to set/setm).
  • Add touch method to create a node if it does not exist.
  • Use a Span struct to represent the span of a node in a file.
  • Use a Position enum to indicate where to insert a new node.
  • Use an Attr struct to represent the attributes of a node.
  • Use a SaveMode enum to indicate how to save changes.

Usage

In Cargo.toml:

[dependencies]
raugeas = "0.3.1"

Summary

A typical interaction looks like this:

use raugeas::{Augeas, Flags};

let mut aug = Augeas::init(Some("/"), "", Flags::NONE).unwrap();

// Get the ip address for host.example.com from `/etc/hosts`.
let entry = aug.get("etc/hosts/*[canonical = 'host.example.com']/ip")?;
if let Some(ip) = entry {
    println!("The ip for host.example.com is {}", ip);
} else {
    println!("There is no entry for host.example.com in /etc/hosts");
}

// Add an alias for host.example.com.
aug.set(
    "etc/hosts/*[canonical = 'host.example.com']/alias[last()+1]",
    "server.example.com",
)?;

Dependencies

~0–2MB
~41K SLoC