feat(project): create export type

Co-authored-by: Kasey White <kwhitemsg@gmail.com>
This commit is contained in:
rvcas 2024-04-03 14:15:08 -04:00 committed by Lucas
parent 9d49be46b8
commit f50f7e42db
2 changed files with 34 additions and 21 deletions

View File

@ -0,0 +1,26 @@
use uplc::ast::{DeBruijn, Program};
use crate::blueprint::{
definitions::Definitions,
parameter::Parameter,
schema::{Annotated, Schema},
};
#[derive(Debug, PartialEq, Clone, serde::Serialize, serde::Deserialize)]
pub struct Export {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub doc: Option<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
#[serde(default)]
pub parameters: Vec<Parameter>,
#[serde(flatten)]
pub program: Program<DeBruijn>,
#[serde(skip_serializing_if = "Definitions::is_empty")]
#[serde(default)]
pub definitions: Definitions<Annotated<Schema>>,
}

View File

@ -3,6 +3,7 @@ pub mod config;
pub mod deps;
pub mod docs;
pub mod error;
pub mod export;
pub mod format;
pub mod github;
pub mod module;
@ -31,11 +32,11 @@ use crate::{
};
use aiken_lang::{
ast::{
DataTypeKey, Definition, FunctionAccessKey, ModuleKind, Span, Tracing, TypedDataType,
DataTypeKey, Definition, FunctionAccessKey, ModuleKind, Tracing, TypedDataType,
TypedFunction,
},
builtins::{self, function},
expr::{TypedExpr, UntypedExpr},
builtins::{self},
expr::UntypedExpr,
gen_uplc::CodeGenerator,
line_numbers::LineNumbers,
tipo::{Type, TypeInfo},
@ -471,28 +472,14 @@ where
.get(module)
.and_then(|checked_module| {
checked_module.ast.definitions().find_map(|def| match def {
Definition::Fn(func) if func.name == name => {
let typed_anon = TypedExpr::Fn {
location: Span::empty(),
tipo: function(
func.arguments.iter().map(|arg| arg.tipo.clone()).collect(),
func.return_type.clone(),
),
is_capture: false,
args: func.arguments.clone(),
body: func.body.clone().into(),
return_annotation: None,
};
Some(typed_anon)
}
Definition::Fn(func) if func.name == name => Some(func),
_ => None,
})
})
.map(|body| {
let program = generator.generate_raw(&body, &[], module);
.map(|func| {
let program = generator.generate_raw(&func.body, &func.arguments, module);
program.to_pretty()
program.to_debruijn().unwrap().to_hex().unwrap()
})
.ok_or_else(|| Error::ExportNotFound {
module: module.to_string(),