Skip to main content
Glama
variant.rs4.13 kB
use dal::{ DalContext, FuncId, Schema, SchemaVariant, SchemaVariantId, func::{ authoring::FuncAuthoringClient, binding::EventualParent, leaf::{ LeafInputLocation, LeafKind, }, }, schema::variant::authoring::VariantAuthoringClient, }; use crate::{ Result, expected::ExpectSchemaVariant, }; /// Lookup a schema variant by name or id pub async fn id(ctx: &DalContext, key: impl SchemaVariantKey) -> Result<SchemaVariantId> { SchemaVariantKey::id(ctx, key).await } /// Create a schema + schema variant with the given name and asset function pub async fn create( ctx: &DalContext, name: impl Into<String>, asset_func: impl Into<String>, ) -> Result<SchemaVariantId> { // Create an asset with a corresponding asset func. After that, commit. let variant = VariantAuthoringClient::create_schema_and_variant(ctx, name, None, None, "test", "FFFFFF") .await?; update_asset_func(ctx, variant.id, asset_func).await?; VariantAuthoringClient::regenerate_variant(ctx, variant.id).await?; Ok(variant.id) } /// Create a management function for the given schema variant pub async fn create_management_func( ctx: &DalContext, variant: impl SchemaVariantKey, name: impl Into<String>, code: impl Into<String>, ) -> Result<FuncId> { let variant_id = id(ctx, variant).await?; let func = FuncAuthoringClient::create_new_management_func(ctx, Some(name.into()), variant_id).await?; FuncAuthoringClient::save_code(ctx, func.id, code.into()).await?; Ok(func.id) } /// Update the asset function for the given schema variant, and regenerate the variant pub async fn update_asset_func( ctx: &DalContext, variant: impl SchemaVariantKey, asset_func: impl Into<String>, ) -> Result<()> { let variant_id = id(ctx, variant).await?; let schema = SchemaVariant::schema_for_schema_variant_id(ctx, variant_id).await?; let variant = SchemaVariant::get_by_id(ctx, variant_id).await?; VariantAuthoringClient::save_variant_content( ctx, variant_id, schema.name, variant.display_name(), variant.category(), variant.description(), variant.link(), variant.color(), variant.component_type(), Some(asset_func.into()), ) .await?; VariantAuthoringClient::regenerate_variant(ctx, variant.id).await?; Ok(()) } /// Create a qualification function for the given schema variant pub async fn create_qualification_func( ctx: &DalContext, variant: impl SchemaVariantKey, name: impl Into<String>, code: impl Into<String>, inputs: &[LeafInputLocation], ) -> Result<FuncId> { let variant_id = id(ctx, variant).await?; let func = FuncAuthoringClient::create_new_leaf_func( ctx, Some(name.into()), LeafKind::Qualification, EventualParent::SchemaVariant(variant_id), inputs, ) .await?; FuncAuthoringClient::save_code(ctx, func.id, code.into()).await?; Ok(func.id) } /// /// Things that you can pass as schema variants (schema name or variant id) /// #[allow(async_fn_in_trait)] pub trait SchemaVariantKey { /// /// Turn this into a real SchemaVariantId /// async fn id(ctx: &DalContext, key: Self) -> Result<SchemaVariantId>; } impl SchemaVariantKey for SchemaVariantId { async fn id(_: &DalContext, key: Self) -> Result<SchemaVariantId> { Ok(key) } } // "SchemaName" resolves to the default variant for the schema impl SchemaVariantKey for &str { async fn id(ctx: &DalContext, key: Self) -> Result<SchemaVariantId> { let schema = Schema::get_by_name(ctx, key).await?; Ok(SchemaVariant::default_id_for_schema(ctx, schema.id()).await?) } } impl SchemaVariantKey for ExpectSchemaVariant { async fn id(_: &DalContext, key: Self) -> Result<SchemaVariantId> { Ok(key.id()) } } impl SchemaVariantKey for SchemaVariant { async fn id(_: &DalContext, key: Self) -> Result<SchemaVariantId> { Ok(key.id()) } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/systeminit/si'

If you have feedback or need assistance with the MCP directory API, please join our Discord server