rust-librocksdb-sys 0.40.0+10.7.5

Native bindings to librocksdb
Documentation
#!/bin/bash
File=$1
CHeaderFile=$(dirname $File)/../include/rocksdb/c.h

echo "// **** DO NOT modify this file! ****"
echo "// This file is generated by cmd:"
echo "//   gen_perf_metrics.bash $@"
echo ""
echo "/// Rust representation of the performance metrics from RocksDB's perf_context"
echo "#[derive(Debug, Copy, Clone, PartialEq, Eq)]"
echo "#[repr(u32)]"
echo "pub enum PerfMetric {"

# Extract the metric enum from c.h and generate our enum based on that ordering
perl -n0e '
# First find the enum block that contains rocksdb_user_key_comparison_count
if (/enum\s*\{[^}]*rocksdb_user_key_comparison_count[^}]*\}/sm) {
    $enum_block = $&;
    
    # Extract metrics from the enum, preserving order
    @metrics = ();
    $count = 0;
    while ($enum_block =~ /rocksdb_(\w+)(?:\s*=\s*(\d+))?\s*,?/g) {
        $metric = $1;
        # If an explicit value is given, use it
        if (defined $2) {
            $count = $2;
        }
        push @metrics, [$metric, $count];
        $count++;
    }
    
    # Output the Rust enum variants
    foreach $pair (@metrics) {
        ($metric, $value) = @$pair;
        # Convert snake_case to PascalCase
        $name = $metric;
        $name =~ s/(^|_)(\w)/\U$2/g;
        print "    $name = $value,\n";
    }
}' $CHeaderFile

echo "}"
echo ""
echo "impl PerfMetric {"
echo "    /// Returns the name of this metric as it appears in RocksDB C++"
echo "    pub const fn name(&self) -> &'static str {"
echo "        match self {"

# Generate name mappings for metrics from c.h
perl -n0e '
# Find the enum block that contains rocksdb_user_key_comparison_count
if (/enum\s*\{[^}]*rocksdb_user_key_comparison_count[^}]*\}/sm) {
    $enum_block = $&;
    
    %metric_names = ();
    
    # Extract metrics from the enum
    while ($enum_block =~ /rocksdb_(\w+)/g) {
        $metric = $1;
        $name = $metric;
        $name =~ s/(^|_)(\w)/\U$2/g;
        $metric_names{$name} = $metric;
    }
    
    # Output all mappings sorted by PascalCase name
    foreach $name (sort keys %metric_names) {
        print "            PerfMetric::$name => \"$metric_names{$name}\",\n";
    }
}' $CHeaderFile

echo "        }"
echo "    }"
echo "}"