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
exportserde
Enhanced export functionality with multiple format support.
extract
High-level extractors for NGINX directives
networknetwork
Network health checking and validation.
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