yerba 0.2.1

YAML Editing and Refactoring with Better Accuracy
use clap::ValueEnum;
use yaml_parser::SyntaxKind;

#[derive(Debug, Clone, PartialEq, ValueEnum)]
pub enum QuoteStyle {
  Plain,
  #[value(alias = "single-quoted")]
  Single,
  #[value(alias = "double-quoted")]
  Double,
  #[value(alias = "block-literal")]
  Literal,
  #[value(alias = "block-folded")]
  Folded,
}

impl std::str::FromStr for QuoteStyle {
  type Err = String;

  fn from_str(string: &str) -> Result<Self, Self::Err> {
    match string {
      "plain" => Ok(QuoteStyle::Plain),
      "single" | "single-quoted" => Ok(QuoteStyle::Single),
      "double" | "double-quoted" => Ok(QuoteStyle::Double),
      "literal" | "block-literal" => Ok(QuoteStyle::Literal),
      "folded" | "block-folded" => Ok(QuoteStyle::Folded),
      _ => Err(format!("unknown quote style: '{}'", string)),
    }
  }
}

impl QuoteStyle {
  pub(crate) fn to_syntax_kind(&self) -> SyntaxKind {
    match self {
      QuoteStyle::Plain => SyntaxKind::PLAIN_SCALAR,
      QuoteStyle::Single => SyntaxKind::SINGLE_QUOTED_SCALAR,
      QuoteStyle::Double => SyntaxKind::DOUBLE_QUOTED_SCALAR,
      QuoteStyle::Literal => SyntaxKind::BLOCK_SCALAR_TEXT,
      QuoteStyle::Folded => SyntaxKind::BLOCK_SCALAR_TEXT,
    }
  }
}