Skip to content

Commit 6038cdc

Browse files
committed
get some stuff for go and streaming working
1 parent 6a38672 commit 6038cdc

File tree

46 files changed

+8155
-1172
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+8155
-1172
lines changed

engine/baml-lib/baml-types/src/baml_value.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,12 @@ impl<T: crate::HasFieldType> crate::HasFieldType for BamlValueWithMeta<T> {
367367
}
368368
}
369369

370+
impl<T: crate::HasCompletion> crate::HasCompletion for BamlValueWithMeta<T> {
371+
fn completion(&self) -> &crate::Completion {
372+
self.meta().completion()
373+
}
374+
}
375+
370376
impl<T> BamlValueWithMeta<T> {
371377
pub fn r#type(&self) -> String {
372378
let plain_value: BamlValue = self.into();
@@ -928,6 +934,10 @@ pub struct Completion {
928934
pub required_done: bool,
929935
}
930936

937+
pub trait HasCompletion {
938+
fn completion(&self) -> &Completion;
939+
}
940+
931941
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
932942
pub enum CompletionState {
933943
Pending,

engine/baml-lib/baml-types/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ mod field_type;
1111
mod generator;
1212
mod value_expr;
1313

14-
pub use baml_value::{BamlValue, BamlValueWithMeta, Completion, CompletionState};
14+
pub use baml_value::{BamlValue, BamlValueWithMeta, Completion, CompletionState, HasCompletion};
1515
pub use constraint::*;
1616
pub use field_type::{
1717
Arrow, FieldType, HasFieldType, LiteralValue, StreamingBehavior, ToUnionName, TypeValue,

engine/baml-lib/jsonish/src/lib.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,12 @@ impl baml_types::HasFieldType for ResponseValueMeta {
4949
}
5050
}
5151

52+
impl baml_types::HasCompletion for ResponseValueMeta {
53+
fn completion(&self) -> &Completion {
54+
&self.2
55+
}
56+
}
57+
5258
#[derive(Debug, Clone, PartialEq)]
5359
pub enum SerializeMode {
5460
Final,

engine/language_client_cffi/Makefile.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ dependencies = ["build-go-cli"]
4646
script = "cd ../../integ-tests/go && go build"
4747
dependencies = ["integ-tests-generate"]
4848

49+
[tasks.integ-tests-run]
50+
script = "cd ../../integ-tests/go && BAML_LIBRARY_PATH=../../engine/target/debug/libbaml_cffi.dylib ./integ-tests"
51+
dependencies = ["integ-tests-build"]
52+
4953
#-----------------------------------------------------------------------------
5054
# Main tasks
5155
#-----------------------------------------------------------------------------

engine/language_client_cffi/src/cffi/cffi_generated.rs

Lines changed: 132 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -672,6 +672,120 @@ impl<'a> flatbuffers::Verifiable for CFFIStreamState {
672672
}
673673

674674
impl flatbuffers::SimpleToVerifyInSlice for CFFIStreamState {}
675+
pub enum CFFITypeNameOffset {}
676+
#[derive(Copy, Clone, PartialEq)]
677+
678+
pub struct CFFITypeName<'a> {
679+
pub _tab: flatbuffers::Table<'a>,
680+
}
681+
682+
impl<'a> flatbuffers::Follow<'a> for CFFITypeName<'a> {
683+
type Inner = CFFITypeName<'a>;
684+
#[inline]
685+
unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
686+
Self { _tab: flatbuffers::Table::new(buf, loc) }
687+
}
688+
}
689+
690+
impl<'a> CFFITypeName<'a> {
691+
pub const VT_NAMESPACE: flatbuffers::VOffsetT = 4;
692+
pub const VT_NAME: flatbuffers::VOffsetT = 6;
693+
694+
#[inline]
695+
pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self {
696+
CFFITypeName { _tab: table }
697+
}
698+
#[allow(unused_mut)]
699+
pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr>(
700+
_fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr>,
701+
args: &'args CFFITypeNameArgs<'args>
702+
) -> flatbuffers::WIPOffset<CFFITypeName<'bldr>> {
703+
let mut builder = CFFITypeNameBuilder::new(_fbb);
704+
if let Some(x) = args.name { builder.add_name(x); }
705+
if let Some(x) = args.namespace { builder.add_namespace(x); }
706+
builder.finish()
707+
}
708+
709+
710+
#[inline]
711+
pub fn namespace(&self) -> Option<&'a str> {
712+
// Safety:
713+
// Created from valid Table for this object
714+
// which contains a valid value in this slot
715+
unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(CFFITypeName::VT_NAMESPACE, None)}
716+
}
717+
#[inline]
718+
pub fn name(&self) -> Option<&'a str> {
719+
// Safety:
720+
// Created from valid Table for this object
721+
// which contains a valid value in this slot
722+
unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(CFFITypeName::VT_NAME, None)}
723+
}
724+
}
725+
726+
impl flatbuffers::Verifiable for CFFITypeName<'_> {
727+
#[inline]
728+
fn run_verifier(
729+
v: &mut flatbuffers::Verifier, pos: usize
730+
) -> Result<(), flatbuffers::InvalidFlatbuffer> {
731+
use self::flatbuffers::Verifiable;
732+
v.visit_table(pos)?
733+
.visit_field::<flatbuffers::ForwardsUOffset<&str>>("namespace", Self::VT_NAMESPACE, false)?
734+
.visit_field::<flatbuffers::ForwardsUOffset<&str>>("name", Self::VT_NAME, false)?
735+
.finish();
736+
Ok(())
737+
}
738+
}
739+
pub struct CFFITypeNameArgs<'a> {
740+
pub namespace: Option<flatbuffers::WIPOffset<&'a str>>,
741+
pub name: Option<flatbuffers::WIPOffset<&'a str>>,
742+
}
743+
impl<'a> Default for CFFITypeNameArgs<'a> {
744+
#[inline]
745+
fn default() -> Self {
746+
CFFITypeNameArgs {
747+
namespace: None,
748+
name: None,
749+
}
750+
}
751+
}
752+
753+
pub struct CFFITypeNameBuilder<'a: 'b, 'b> {
754+
fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a>,
755+
start_: flatbuffers::WIPOffset<flatbuffers::TableUnfinishedWIPOffset>,
756+
}
757+
impl<'a: 'b, 'b> CFFITypeNameBuilder<'a, 'b> {
758+
#[inline]
759+
pub fn add_namespace(&mut self, namespace: flatbuffers::WIPOffset<&'b str>) {
760+
self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(CFFITypeName::VT_NAMESPACE, namespace);
761+
}
762+
#[inline]
763+
pub fn add_name(&mut self, name: flatbuffers::WIPOffset<&'b str>) {
764+
self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(CFFITypeName::VT_NAME, name);
765+
}
766+
#[inline]
767+
pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a>) -> CFFITypeNameBuilder<'a, 'b> {
768+
let start = _fbb.start_table();
769+
CFFITypeNameBuilder {
770+
fbb_: _fbb,
771+
start_: start,
772+
}
773+
}
774+
#[inline]
775+
pub fn finish(self) -> flatbuffers::WIPOffset<CFFITypeName<'a>> {
776+
let o = self.fbb_.end_table(self.start_);
777+
flatbuffers::WIPOffset::new(o.value())
778+
}
779+
}
780+
781+
impl core::fmt::Debug for CFFITypeName<'_> {
782+
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
783+
let mut ds = f.debug_struct("CFFITypeName");
784+
ds.field("namespace", &self.namespace());
785+
ds.field("name", &self.name());
786+
ds.finish()
787+
}
788+
}
675789
pub enum CFFIValueHolderOffset {}
676790
#[derive(Copy, Clone, PartialEq)]
677791

@@ -1884,11 +1998,11 @@ impl<'a> CFFIValueClass<'a> {
18841998

18851999

18862000
#[inline]
1887-
pub fn name(&self) -> Option<&'a str> {
2001+
pub fn name(&self) -> Option<CFFITypeName<'a>> {
18882002
// Safety:
18892003
// Created from valid Table for this object
18902004
// which contains a valid value in this slot
1891-
unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(CFFIValueClass::VT_NAME, None)}
2005+
unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<CFFITypeName>>(CFFIValueClass::VT_NAME, None)}
18922006
}
18932007
#[inline]
18942008
pub fn fields(&self) -> Option<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<CFFIMapEntry<'a>>>> {
@@ -1913,15 +2027,15 @@ impl flatbuffers::Verifiable for CFFIValueClass<'_> {
19132027
) -> Result<(), flatbuffers::InvalidFlatbuffer> {
19142028
use self::flatbuffers::Verifiable;
19152029
v.visit_table(pos)?
1916-
.visit_field::<flatbuffers::ForwardsUOffset<&str>>("name", Self::VT_NAME, false)?
2030+
.visit_field::<flatbuffers::ForwardsUOffset<CFFITypeName>>("name", Self::VT_NAME, false)?
19172031
.visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<CFFIMapEntry>>>>("fields", Self::VT_FIELDS, false)?
19182032
.visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<CFFIMapEntry>>>>("dynamic_fields", Self::VT_DYNAMIC_FIELDS, false)?
19192033
.finish();
19202034
Ok(())
19212035
}
19222036
}
19232037
pub struct CFFIValueClassArgs<'a> {
1924-
pub name: Option<flatbuffers::WIPOffset<&'a str>>,
2038+
pub name: Option<flatbuffers::WIPOffset<CFFITypeName<'a>>>,
19252039
pub fields: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<CFFIMapEntry<'a>>>>>,
19262040
pub dynamic_fields: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<CFFIMapEntry<'a>>>>>,
19272041
}
@@ -1942,8 +2056,8 @@ pub struct CFFIValueClassBuilder<'a: 'b, 'b> {
19422056
}
19432057
impl<'a: 'b, 'b> CFFIValueClassBuilder<'a, 'b> {
19442058
#[inline]
1945-
pub fn add_name(&mut self, name: flatbuffers::WIPOffset<&'b str>) {
1946-
self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(CFFIValueClass::VT_NAME, name);
2059+
pub fn add_name(&mut self, name: flatbuffers::WIPOffset<CFFITypeName<'b >>) {
2060+
self.fbb_.push_slot_always::<flatbuffers::WIPOffset<CFFITypeName>>(CFFIValueClass::VT_NAME, name);
19472061
}
19482062
#[inline]
19492063
pub fn add_fields(&mut self, fields: flatbuffers::WIPOffset<flatbuffers::Vector<'b , flatbuffers::ForwardsUOffset<CFFIMapEntry<'b >>>>) {
@@ -2015,11 +2129,11 @@ impl<'a> CFFIValueEnum<'a> {
20152129

20162130

20172131
#[inline]
2018-
pub fn name(&self) -> Option<&'a str> {
2132+
pub fn name(&self) -> Option<CFFITypeName<'a>> {
20192133
// Safety:
20202134
// Created from valid Table for this object
20212135
// which contains a valid value in this slot
2022-
unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(CFFIValueEnum::VT_NAME, None)}
2136+
unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<CFFITypeName>>(CFFIValueEnum::VT_NAME, None)}
20232137
}
20242138
#[inline]
20252139
pub fn value(&self) -> Option<&'a str> {
@@ -2044,15 +2158,15 @@ impl flatbuffers::Verifiable for CFFIValueEnum<'_> {
20442158
) -> Result<(), flatbuffers::InvalidFlatbuffer> {
20452159
use self::flatbuffers::Verifiable;
20462160
v.visit_table(pos)?
2047-
.visit_field::<flatbuffers::ForwardsUOffset<&str>>("name", Self::VT_NAME, false)?
2161+
.visit_field::<flatbuffers::ForwardsUOffset<CFFITypeName>>("name", Self::VT_NAME, false)?
20482162
.visit_field::<flatbuffers::ForwardsUOffset<&str>>("value", Self::VT_VALUE, false)?
20492163
.visit_field::<bool>("is_dynamic", Self::VT_IS_DYNAMIC, false)?
20502164
.finish();
20512165
Ok(())
20522166
}
20532167
}
20542168
pub struct CFFIValueEnumArgs<'a> {
2055-
pub name: Option<flatbuffers::WIPOffset<&'a str>>,
2169+
pub name: Option<flatbuffers::WIPOffset<CFFITypeName<'a>>>,
20562170
pub value: Option<flatbuffers::WIPOffset<&'a str>>,
20572171
pub is_dynamic: bool,
20582172
}
@@ -2073,8 +2187,8 @@ pub struct CFFIValueEnumBuilder<'a: 'b, 'b> {
20732187
}
20742188
impl<'a: 'b, 'b> CFFIValueEnumBuilder<'a, 'b> {
20752189
#[inline]
2076-
pub fn add_name(&mut self, name: flatbuffers::WIPOffset<&'b str>) {
2077-
self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(CFFIValueEnum::VT_NAME, name);
2190+
pub fn add_name(&mut self, name: flatbuffers::WIPOffset<CFFITypeName<'b >>) {
2191+
self.fbb_.push_slot_always::<flatbuffers::WIPOffset<CFFITypeName>>(CFFIValueEnum::VT_NAME, name);
20782192
}
20792193
#[inline]
20802194
pub fn add_value(&mut self, value: flatbuffers::WIPOffset<&'b str>) {
@@ -2361,11 +2475,11 @@ impl<'a> CFFIValueUnionVariant<'a> {
23612475

23622476

23632477
#[inline]
2364-
pub fn name(&self) -> Option<&'a str> {
2478+
pub fn name(&self) -> Option<CFFITypeName<'a>> {
23652479
// Safety:
23662480
// Created from valid Table for this object
23672481
// which contains a valid value in this slot
2368-
unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<&str>>(CFFIValueUnionVariant::VT_NAME, None)}
2482+
unsafe { self._tab.get::<flatbuffers::ForwardsUOffset<CFFITypeName>>(CFFIValueUnionVariant::VT_NAME, None)}
23692483
}
23702484
#[inline]
23712485
pub fn variant_name(&self) -> Option<&'a str> {
@@ -2404,7 +2518,7 @@ impl flatbuffers::Verifiable for CFFIValueUnionVariant<'_> {
24042518
) -> Result<(), flatbuffers::InvalidFlatbuffer> {
24052519
use self::flatbuffers::Verifiable;
24062520
v.visit_table(pos)?
2407-
.visit_field::<flatbuffers::ForwardsUOffset<&str>>("name", Self::VT_NAME, false)?
2521+
.visit_field::<flatbuffers::ForwardsUOffset<CFFITypeName>>("name", Self::VT_NAME, false)?
24082522
.visit_field::<flatbuffers::ForwardsUOffset<&str>>("variant_name", Self::VT_VARIANT_NAME, false)?
24092523
.visit_field::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'_, flatbuffers::ForwardsUOffset<CFFIFieldTypeHolder>>>>("field_types", Self::VT_FIELD_TYPES, false)?
24102524
.visit_field::<i32>("value_type_index", Self::VT_VALUE_TYPE_INDEX, false)?
@@ -2414,7 +2528,7 @@ impl flatbuffers::Verifiable for CFFIValueUnionVariant<'_> {
24142528
}
24152529
}
24162530
pub struct CFFIValueUnionVariantArgs<'a> {
2417-
pub name: Option<flatbuffers::WIPOffset<&'a str>>,
2531+
pub name: Option<flatbuffers::WIPOffset<CFFITypeName<'a>>>,
24182532
pub variant_name: Option<flatbuffers::WIPOffset<&'a str>>,
24192533
pub field_types: Option<flatbuffers::WIPOffset<flatbuffers::Vector<'a, flatbuffers::ForwardsUOffset<CFFIFieldTypeHolder<'a>>>>>,
24202534
pub value_type_index: i32,
@@ -2439,8 +2553,8 @@ pub struct CFFIValueUnionVariantBuilder<'a: 'b, 'b> {
24392553
}
24402554
impl<'a: 'b, 'b> CFFIValueUnionVariantBuilder<'a, 'b> {
24412555
#[inline]
2442-
pub fn add_name(&mut self, name: flatbuffers::WIPOffset<&'b str>) {
2443-
self.fbb_.push_slot_always::<flatbuffers::WIPOffset<_>>(CFFIValueUnionVariant::VT_NAME, name);
2556+
pub fn add_name(&mut self, name: flatbuffers::WIPOffset<CFFITypeName<'b >>) {
2557+
self.fbb_.push_slot_always::<flatbuffers::WIPOffset<CFFITypeName>>(CFFIValueUnionVariant::VT_NAME, name);
24442558
}
24452559
#[inline]
24462560
pub fn add_variant_name(&mut self, variant_name: flatbuffers::WIPOffset<&'b str>) {

0 commit comments

Comments
 (0)