@@ -4,16 +4,19 @@ use combine::easy::{Error, Info};
4
4
use combine:: { choice, many, many1, optional, position, StdParseResult } ;
5
5
use combine:: { parser, Parser } ;
6
6
#[ cfg( feature = "serde" ) ]
7
- use serde:: Serialize ;
7
+ use serde:: { Deserialize , Serialize } ;
8
8
9
9
use crate :: helpers:: { ident, kind, name, punct} ;
10
10
use crate :: position:: Pos ;
11
11
use crate :: tokenizer:: { Kind as T , Token , TokenStream } ;
12
12
13
+ #[ cfg( feature = "serde" ) ]
13
14
/// Text abstracts over types that hold a string value.
14
15
/// It is used to make the AST generic over the string type.
15
- pub trait Text < ' a > : ' a {
16
- #[ cfg( feature = "serde" ) ]
16
+ pub trait Text < ' a >
17
+ where
18
+ Self : ' a + Serialize + Deserialize < ' a > ,
19
+ {
17
20
type Value : ' a
18
21
+ From < & ' a str >
19
22
+ AsRef < str >
@@ -24,9 +27,14 @@ pub trait Text<'a>: 'a {
24
27
+ Ord
25
28
+ fmt:: Debug
26
29
+ Clone
27
- + Serialize ;
30
+ + Serialize
31
+ + Deserialize < ' a > ;
32
+ }
28
33
29
- #[ cfg( not( feature = "serde" ) ) ]
34
+ #[ cfg( not( feature = "serde" ) ) ]
35
+ /// Text abstracts over types that hold a string value.
36
+ /// It is used to make the AST generic over the string type.
37
+ pub trait Text < ' a > : ' a {
30
38
type Value : ' a
31
39
+ From < & ' a str >
32
40
+ AsRef < str >
@@ -52,7 +60,7 @@ impl<'a> Text<'a> for std::borrow::Cow<'a, str> {
52
60
}
53
61
54
62
#[ derive( Debug , Clone , PartialEq ) ]
55
- #[ cfg_attr( feature = "serde" , derive( Serialize ) ) ]
63
+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
56
64
pub struct Directive < ' a , T : Text < ' a > > {
57
65
pub position : Pos ,
58
66
pub name : T :: Value ,
@@ -66,13 +74,13 @@ pub struct Directive<'a, T: Text<'a>> {
66
74
/// in `serde_json`: encapsulate value in new-type, allowing type
67
75
/// to be extended later.
68
76
#[ derive( Debug , Clone , PartialEq ) ]
69
- #[ cfg_attr( feature = "serde" , derive( Serialize ) ) ]
77
+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
70
78
// we use i64 as a reference implementation: graphql-js thinks even 32bit
71
79
// integers is enough. We might consider lift this limit later though
72
80
pub struct Number ( pub ( crate ) i64 ) ;
73
81
74
82
#[ derive( Debug , Clone , PartialEq ) ]
75
- #[ cfg_attr( feature = "serde" , derive( Serialize ) ) ]
83
+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
76
84
pub enum Value < ' a , T : Text < ' a > > {
77
85
Variable ( T :: Value ) ,
78
86
Int ( Number ) ,
@@ -106,7 +114,7 @@ impl<'a, T: Text<'a>> Value<'a, T> {
106
114
}
107
115
108
116
#[ derive( Debug , Clone , PartialEq ) ]
109
- #[ cfg_attr( feature = "serde" , derive( Serialize ) ) ]
117
+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
110
118
pub enum Type < ' a , T : Text < ' a > > {
111
119
NamedType ( T :: Value ) ,
112
120
ListType ( Box < Type < ' a , T > > ) ,
0 commit comments