gracile-core 0.1.2

Core engine for the Gracile templating language — lexer, parser, AST, and renderer
Documentation
use crate::{fixtures::render_file, json_ctx};
use serde_json::json;

#[test]
fn class() {
    let output = render_file(
        "java/templates/class.java.gtl",
        json_ctx(json!({
            "packageName": "com.example.model",
            "imports": ["java.util.List", "java.util.Optional"],
            "timestamp": "2026-03-01",
            "accessModifier": "public",
            "isStatic": false,
            "className": "UserRecord",
            "members": [
                { "type": "String",       "name": "username" },
                { "type": "List<String>", "name": "roles"    },
            ]
        })),
    );

    insta::assert_snapshot!(output);
}

#[test]
fn interface() {
    let output = render_file(
        "java/templates/interface.java.gtl",
        json_ctx(json!({
            "packageName": "com.example.repository",
            "imports": ["java.util.List", "java.util.Optional"],
            "accessModifier": "public",
            "isSealed": false,
            "interfaceName": "Repository",
            "interfaceType": "<T>",
            "methods": [
                {
                    "accessModifier": "public",
                    "returnValue": "List",
                    "isTyped": true,
                    "name": "findAll",
                    "parameters": []
                },
                {
                    "accessModifier": "public",
                    "returnValue": "Optional",
                    "isTyped": true,
                    "name": "findById",
                    "parameters": [{ "type": "Long", "name": "id" }]
                },
                {
                    "accessModifier": "public",
                    "returnValue": "void",
                    "isTyped": false,
                    "name": "save",
                    "parameters": [{ "type": "T", "name": "entity" }]
                }
            ]
        })),
    );

    insta::assert_snapshot!(output);
}