Crate hq_rs

Source
Expand description

§hq

ci crate docs

hq is a command-line HCL processor.

§install

This will install an hq binary on your system:

$ cargo install hq-rs

§usage

Here is an example HCL file:

some_attr = {
    foo = [1, 2]
    bar = true
}

some_block "some_block_label" {
    attr = "value"
}

some_block "another_block_label" {
    attr = "another_value"
}

You can query the attribute(s) and block(s) in an HCL file like so:

$ cat example.hcl | hq '.some_attr'
{
  foo = [
    1,
    2
  ]
  bar = true
}
$ cat example.hcl | hq '.some_attr.foo'
[
  1,
  2
]
$ cat example.hcl | hq '.some_block'
some_block "some_block_label" {
  attr = "value"
}
some_block "another_block_label" {
  attr = "another_value"
}
$ cat example.hcl | hq '.some_block{"some_block_label"}.attr'
"value"
$ cat example.hcl | hq '.some_block{"another_block_label"}.attr'
"another_value"

Or read directly from a file by passing read -f:

$ hq read -f example.hcl '.some_block'
some_block "some_block_label" {
  attr = "value"
}
some_block "another_block_label" {
  attr = "another_value"
}

You can modify HCL (even HCL that is formatted and contains comments) like so:

$ cat example.hcl | hq write '.fmt_block.first_formatted_field="something_new"'
some_attr = {
    foo = [1, 2]
    bar = true
}

some_block "some_block_label" {
    attr = "value"
}

some_block "another_block_label" {
    attr = "another_value"
}

# this is a block comment
fmt_block "fmt_label" {
    # this is a body comment
    # this is another body comment

    # this is a third body comment
    first_formatted_field  = "something_new"
    second_formatted_field = "second_value"
}

nested_block {
    inner_block {
        value = "deep"
        another_value = "nested"
    }
}

Modifications can also be written directly to a file by passing -i/--inline and -f/--file:

$ hq write -i -f example.hcl '.fmt_block.first_formatted_field="something_written_inline"'
$ hq read -f example.hcl .fmt_block.first_formatted_field
"something_written_inline"

You can delete entries in an HCL file like so:

$ cat example.hcl | hq delete '.nested_block.inner_block.value'
some_attr = {
    foo = [1, 2]
    bar = true
}

some_block "some_block_label" {
    attr = "value"
}

some_block "another_block_label" {
    attr = "another_value"
}

# this is a block comment
fmt_block "fmt_label" {
    # this is a body comment
    # this is another body comment

    # this is a third body comment
    first_formatted_field  = "fmt_value"
    second_formatted_field = "second_value"
}

nested_block {
    inner_block {
        another_value = "nested"
    }
}

Or you can delete entries from a file by passing -i/--inline and -f/--file:

$ hq delete -i -f example.hcl '.nested_block.inner_block.another_value'

Re-exports§

pub use filter::parser;
pub use filter::parser::parse_filter;
pub use query::query;
pub use write::write;
pub use delete::delete;

Modules§

delete
use the hcl-edit crate to remove values from HCL documents
filter
a parser for hq filter expressions
query
use the hcl-rs crate to query HCL documents
write
use the hcl-edit crate to modify HCL documents