shelly-shell 0.5.4

A Rust based Unix style shell with a typed and structured language syntax.

use crate::language::{
    data::types::{FieldDefinition, TypeKind, TypeRegistry},
    native::{NativeType, NativeVisibility},
    text::location::Location,
};

impl TypeRegistry
{
    pub(crate) fn register_json_types(&mut self)
    {
        for name in [
            "__JsonArrayReader",
            "__JsonDocument",
            "__JsonNumber",
            "__JsonCodec",
            "__JsonConversion",
        ]
        {
            self.register_native(name.into(), TypeKind::Builtin, NativeVisibility::Hidden);
        }
        let string = self.builtin_id("String").unwrap();
        let integer = self.builtin_id("Integer").unwrap();
        for name in [
            "SyntaxError",
            "EncodingError",
            "MappingError",
            "PathError",
            "LimitError",
            "ValidationError",
        ]
        {
            let fields = [
                ("message", string),
                ("path", string),
                ("line", integer),
                ("column", integer),
            ]
            .into_iter()
            .map(|(name, type_id)| FieldDefinition {
                name: name.into(),
                type_id,
                public: true,
                optional: false,
                location: Location::new("<native>", 1, 1),
            })
            .collect();
            let id = self.register(
                name.into(),
                TypeKind::Struct(fields),
                Some(Location::new("<native>", 1, 1)),
            );
            self.mark_error(id);
            self.native_types.insert(
                format!("__json_{}", name),
                NativeType {
                    id,
                    visibility: NativeVisibility::Hidden,
                },
            );
        }
    }
}