Skip to main content

Crate nginx_discovery

Crate nginx_discovery 

Source
Expand description

§nginx-discovery

Discover and introspect NGINX configurations with ease.

This crate provides three levels of API for working with NGINX configurations:

  1. High-level Discovery API: Simple methods for common use cases
  2. Mid-level Extractors: Type-safe directive extraction
  3. Low-level Parser: Direct AST access for custom processing

§Quick Start

use nginx_discovery::prelude::*;

// Parse configuration text
let config = r"
    http {
        access_log /var/log/nginx/access.log;
    }
";

let discovery = NginxDiscovery::from_config_text(config)?;

// Get access logs
for log in discovery.access_logs() {
    println!("Log: {}", log.path.display());
}

// Get all server names
for name in discovery.server_names() {
    println!("Server: {}", name);
}

§Feature Flags

  • system (default): System interaction (detect nginx, run nginx -T)
  • serde: JSON/YAML serialization support
  • visitor: Visitor pattern for AST traversal
  • includes: Include directive resolution
  • cli: Command-line interface (binary only)

§Examples

§Extract Log Files

use nginx_discovery::prelude::*;

let config = r"
    access_log /var/log/nginx/access.log combined;
    log_format combined '$remote_addr $request';
";

let discovery = NginxDiscovery::from_config_text(config)?;
let logs = discovery.access_logs();

for log in logs {
    println!("Path: {}", log.path.display());
    if let Some(format_name) = &log.format_name {
        println!("Format: {}", format_name);
    }
}

§Parse from File

use nginx_discovery::prelude::*;

let discovery = NginxDiscovery::from_config_file("/etc/nginx/nginx.conf")?;
let logs = discovery.access_logs();
println!("Found {} access logs", logs.len());

§Mid-level API

use nginx_discovery::{parse, extract};

let config_text = "access_log /var/log/nginx/access.log;";
let config = parse(config_text)?;

let logs = extract::access_logs(&config)?;
assert_eq!(logs.len(), 1);

§Low-level Parser

use nginx_discovery::parse;

let config = parse("user nginx;")?;
assert_eq!(config.directives.len(), 1);
assert_eq!(config.directives[0].name(), "user");

Re-exports§

pub use error::Error;
pub use error::Result;
pub use parser::parse;

Modules§

ast
Abstract Syntax Tree (AST) types for NGINX configurations
error
Enhanced error types with helpful diagnostics
error_builder
Error builder for constructing detailed error messages
extract
High-level extractors for NGINX directives
parser
NGINX configuration parser
prelude
Commonly used imports for quick setup
systemsystem
System interaction utilities for NGINX discovery
types
High-level types for NGINX configuration elements
visitorvisitor
Visitor pattern for traversing AST

Structs§

NginxDiscovery
High-level NGINX configuration discovery