@@ -36,7 +36,7 @@ use neo4j::value::graph::{
3636 UnboundRelationship as Neo4jUnboundRelationship ,
3737} ;
3838use neo4j:: value:: spatial:: { Cartesian2D , Cartesian3D , WGS84_2D , WGS84_3D } ;
39- use neo4j:: value:: { time, vector, ValueReceive , ValueSend } ;
39+ use neo4j:: value:: { time, unsupported_type , vector, ValueReceive , ValueSend } ;
4040
4141#[ derive( Debug ) ]
4242#[ repr( transparent) ]
@@ -121,6 +121,12 @@ pub(super) enum CypherValue {
121121 dtype : String ,
122122 data : String ,
123123 } ,
124+ #[ serde( rename_all = "camelCase" ) ]
125+ CypherUnsupportedType {
126+ name : String ,
127+ minimum_protocol : String ,
128+ message : Option < String > ,
129+ } ,
124130}
125131
126132#[ derive( Debug , Deserialize , Serialize ) ]
@@ -511,6 +517,11 @@ impl TryFrom<CypherValue> for ValueSend {
511517 }
512518 }
513519 }
520+ CypherValue :: CypherUnsupportedType { .. } => {
521+ return Err ( NotADriverValueError :: new (
522+ "UnsupportedType cannot be used as input type" ,
523+ ) )
524+ }
514525 } )
515526 }
516527}
@@ -690,7 +701,7 @@ impl TryFrom<ValueSend> for CypherValue {
690701 ValueSend :: LocalDateTime ( value) => local_date_time_to_cypher_value ( value) ?,
691702 ValueSend :: DateTime ( value) => date_time_to_cypher_value ( value) ?,
692703 ValueSend :: DateTimeFixed ( value) => date_time_fixed_to_cypher_value ( value) ?,
693- ValueSend :: Vector ( value) => vector_cypher_value ( value) ?,
704+ ValueSend :: Vector ( value) => vector_to_cypher_value ( value) ?,
694705 _ => {
695706 return Err ( TestKitError :: backend_err ( format ! (
696707 "Failed to serialize ValueSend to json: {v:?}" ,
@@ -834,7 +845,8 @@ impl TryFrom<ValueReceive> for CypherValue {
834845 ValueReceive :: LocalDateTime ( value) => local_date_time_to_cypher_value ( value) ?,
835846 ValueReceive :: DateTime ( value) => date_time_to_cypher_value ( value) ?,
836847 ValueReceive :: DateTimeFixed ( value) => date_time_fixed_to_cypher_value ( value) ?,
837- ValueReceive :: Vector ( value) => vector_cypher_value ( value) ?,
848+ ValueReceive :: Vector ( value) => vector_to_cypher_value ( value) ?,
849+ ValueReceive :: UnsupportedType ( value) => unsupported_type_to_cypher_value ( value) ,
838850 ValueReceive :: BrokenValue ( v) => {
839851 return Err ( BrokenValueError :: BrokenValue {
840852 reason : v. reason ( ) . into ( ) ,
@@ -953,7 +965,7 @@ fn date_time_fixed_to_cypher_value(
953965 } ) )
954966}
955967
956- fn vector_cypher_value ( value : vector:: Vector ) -> Result < CypherValue , BrokenValueError > {
968+ fn vector_to_cypher_value ( value : vector:: Vector ) -> Result < CypherValue , BrokenValueError > {
957969 Ok ( match value {
958970 vector:: Vector :: F64 ( value) => CypherValue :: CypherVector {
959971 dtype : String :: from ( "f64" ) ,
@@ -1021,6 +1033,18 @@ fn vector_cypher_value(value: vector::Vector) -> Result<CypherValue, BrokenValue
10211033 } )
10221034}
10231035
1036+ fn unsupported_type_to_cypher_value ( value : unsupported_type:: UnsupportedType ) -> CypherValue {
1037+ CypherValue :: CypherUnsupportedType {
1038+ name : value. name ( ) . to_owned ( ) ,
1039+ minimum_protocol : format ! (
1040+ "{}.{}" ,
1041+ value. minimum_protocol_version( ) . 0 ,
1042+ value. minimum_protocol_version( ) . 1
1043+ ) ,
1044+ message : value. message ( ) . map ( String :: from) ,
1045+ }
1046+ }
1047+
10241048#[ allow( clippy:: result_large_err) ]
10251049fn try_into_node ( n : Neo4jNode ) -> Result < CypherNode , TestKitError > {
10261050 Ok ( CypherNode {
0 commit comments