Class: DSPy::TypeSerializer
- Inherits:
-
Object
- Object
- DSPy::TypeSerializer
- Extended by:
- T::Sig
- Defined in:
- lib/dspy/type_serializer.rb
Class Method Summary collapse
Class Method Details
.serialize(value) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/dspy/type_serializer.rb', line 11 def self.serialize(value) case value when T::Struct serialize_struct(value) when Array value.map { |item| serialize(item) } when Hash value.transform_values { |v| serialize(v) } else return serialize(value.serialize) if value.respond_to?(:serialize) value end end |
.serialize_struct(struct) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/dspy/type_serializer.rb', line 28 def self.serialize_struct(struct) # Handle anonymous structs that don't have a name class_name = struct.class.name type_name = if class_name.nil? || class_name.empty? # For anonymous structs, use a generic identifier "AnonymousStruct" else class_name.split('::').last end result = { "_type" => type_name } # Get all props and serialize their values struct.class.props.each do |prop_name, prop_info| prop_value = struct.send(prop_name) # Skip nil values for optional fields next if prop_value.nil? && prop_info[:fully_optional] # Recursively serialize nested values result[prop_name.to_s] = serialize(prop_value) end result end |