ecformat 0.2.0

command line tool to keep files correct in respect of your EditorConfig
Documentation
// SPDX-FileCopyrightText: Contributors to ecformat project <https://codeberg.org/BaumiCoder/ecformat>
//
// SPDX-License-Identifier: BlueOak-1.0.0

//! Module for the `spelling_language` property of EditorConfig.

use ec4rs::{
    PropertyKey,
    property::{self, SpellingLanguage},
};

use crate::errors;

use super::PropertyConfigHandler;

/// Handles the `spelling_language` property.
pub struct SpellingLanguageHandler {}

impl PropertyConfigHandler for SpellingLanguageHandler {
    fn check(&self, properties: &ec4rs::Properties) -> anyhow::Result<()> {
        match properties.get::<property::SpellingLanguage>() {
            Ok(SpellingLanguage::Value(language_tag)) => {
                // Workaround for https://github.com/TheDaemoness/ec4rs/issues/22
                if language_tag.as_str() == "unset" {
                    Ok(())
                } else {
                    language_tag.validate().map_err(|validation_error| {
                        errors::SpellingLanguageSnafu { validation_error }
                            .build()
                            .into()
                    })
                }
            }
            // spelling_language property is not set
            Err(raw_value) => {
                if raw_value.to_lowercase().into_str() == "unset" {
                    Ok(())
                } else {
                    Err(errors::ParsingSnafu {
                        value: raw_value.into_str(),
                        property_name: SpellingLanguage::key(),
                    }
                    .build()
                    .into())
                }
            }
        }
    }
}