awsm-env 0.2.3

A lightweight utility for syncing AWS Secrets Manager secrets to environment variables.
Documentation
//! A parser for .env files with directives.

char = { !NEWLINE ~ ANY }

WHITESPACE = _{ " " | "\t" }
COMMENT    = _{ "#" ~ WHITESPACE* ~ !"@" ~ char* ~ NEWLINE }

aws_sm_driective_value = @{ (ASCII_ALPHANUMERIC | "/" | "_" | "+" | "=" | "." | "@" | "-" | "$")+ }
aws_sm_directive       =  { "@aws-sm" ~ aws_sm_driective_value }

aws_ps_driective_value = @{ (ASCII_ALPHANUMERIC | "/" | "_" | "+" | "=" | "." | "@" | "-" | "$")+ }
aws_ps_directive       =  { "@aws-ps" ~ aws_ps_driective_value }

pair_ident = @{ (ASCII_ALPHANUMERIC | "." | "-" | "_")+ }

pair_value_squote = @{ ("\\'" | !"'" ~ ANY)* }
pair_value_dquote = @{ ("\\\"" | !"\"" ~ ANY)* }
pair_value_tick   = @{ ("\\`" | !"`" ~ ANY)* }
pair_value_raw    = @{ (!"#" ~ char)* }

pair_value = ${
    ("'" ~ pair_value_squote ~ "'")
  | ("\"" ~ pair_value_dquote ~ "\"")
  | "`" ~ pair_value_tick ~ "`"
  | pair_value_raw
}

optional_directive_indicator = @{ "@optional" }

directive = { "#" ~ (aws_sm_directive | aws_ps_directive) ~ optional_directive_indicator? }
pair      = { "export"? ~ pair_ident ~ ("=" | ":") ~ pair_value }

declaration = { (directive ~ NEWLINE+)? ~ pair }

file = { SOI ~ (declaration | NEWLINE)* ~ EOI }