craby_codegen 0.1.0-dev.20251030031943

Craby code generator
Documentation
use std::path::PathBuf;

use crate::{parser::native_spec_parser::try_parse_schema, types::CodegenContext};

pub fn get_codegen_context() -> CodegenContext {
    let schemas = try_parse_schema(
        "
        import type { NativeModule, Signal } from 'craby-modules';
        import { NativeModuleRegistry } from 'craby-modules';

        export interface TestObject {
            foo: string;
            bar: number;
            baz: boolean;
            sub: SubObject | null;
            camelCase: number;
            PascalCase: number;
            snake_case: number;
        }

        export type SubObject = {
            a: string | null;
            b: number;
            c: boolean;
        };

        export type MaybeNumber = number | null;

        export enum MyEnum {
            Foo = 'foo',
            Bar = 'bar',
            Baz = 'baz',
        }

        export enum SwitchState {
            Off = 0,
            On = 1,
        }

        export interface Spec extends NativeModule {
            numericMethod(arg: number): number;
            booleanMethod(arg: boolean): boolean;
            stringMethod(arg: string): string;
            objectMethod(arg: TestObject): TestObject;
            arrayMethod(arg: number[]): number[];
            enumMethod(arg0: MyEnum, arg1: SwitchState): string;
            nullableMethod(arg: number | null): MaybeNumber;
            promiseMethod(arg: number): Promise<number>;
            camelMethod(firstArg: number, secondArg: number): number;
            PascalMethod(FirstArg: number, SecondArg: number): number;
            snakeMethod(first_arg: number, second_arg: number): number;
            onSignal: Signal;
        }

        export default NativeModuleRegistry.getEnforcing<Spec>('CrabyTest');
        ",
    )
    .unwrap();

    CodegenContext {
        name: "test_module".to_string(),
        root: PathBuf::from("."),
        schemas,
    }
}