cratestack-macros 0.7.2

Rust-native schema-first framework for typed HTTP APIs, generated clients, and backend services.
Documentation
use std::collections::BTreeSet;

use cratestack_core::SourceSpan;

use super::*;

fn synthetic_span() -> SourceSpan {
    SourceSpan {
        start: 0,
        end: 0,
        line: 1,
    }
}

fn vector_type_ref(arity: TypeArity, dimension: u32) -> TypeRef {
    TypeRef {
        name: "Vector".to_owned(),
        name_span: synthetic_span(),
        arity,
        generic_args: Vec::new(),
        int_args: vec![dimension],
    }
}

#[test]
fn required_vector_field_maps_to_sql_value_vector() {
    let ty = vector_type_ref(TypeArity::Required, 1536);
    let enum_names: BTreeSet<&str> = BTreeSet::new();
    let tokens = sql_value_tokens(quote::quote! { self.embedding.clone() }, &ty, &enum_names);
    let rendered = tokens.to_string();
    assert!(
        rendered.contains("SqlValue :: Vector"),
        "rendered was: {rendered}"
    );
}

#[test]
fn optional_vector_field_maps_to_null_vector() {
    let ty = vector_type_ref(TypeArity::Optional, 3);
    let enum_names: BTreeSet<&str> = BTreeSet::new();
    let tokens = sql_value_tokens(quote::quote! { value }, &ty, &enum_names);
    let rendered = tokens.to_string();
    assert!(
        rendered.contains("SqlValue :: Vector") && rendered.contains("NullVector"),
        "rendered was: {rendered}"
    );
}