Browse Source

Add Serialize [derive] using serde crate. (#1055)

Add Serialize [derive] using serde crate.


Signed-off-by: ethnical <ethnical@1337.fr>
Co-authored-by: Cyrill Leutwiler <bigcyrill@hotmail.com>
Co-authored-by: Lucas Steuernagel <38472950+LucasSte@users.noreply.github.com>
Ethnical 3 years ago
parent
commit
f3f0c46fa9
2 changed files with 63 additions and 6 deletions
  1. 5 0
      solang-parser/Cargo.toml
  2. 58 6
      solang-parser/src/pt.rs

+ 5 - 0
solang-parser/Cargo.toml

@@ -18,8 +18,13 @@ lalrpop-util = "0.19"
 phf = { version = "0.10", features = ["macros"] }
 phf = { version = "0.10", features = ["macros"] }
 unicode-xid = "0.2.0"
 unicode-xid = "0.2.0"
 itertools = "0.10"
 itertools = "0.10"
+serde = { version = "1.0.145", features = ["derive"], optional = true }
 
 
 [dev-dependencies]
 [dev-dependencies]
 walkdir = "2.3.2"
 walkdir = "2.3.2"
 regex = "1.5.5"
 regex = "1.5.5"
 pretty_assertions = "1.2"
 pretty_assertions = "1.2"
+
+[features]
+default = []
+pt-serde = ["serde"]

+ 58 - 6
solang-parser/src/pt.rs

@@ -1,9 +1,13 @@
 // SPDX-License-Identifier: Apache-2.0
 // SPDX-License-Identifier: Apache-2.0
 
 
+#[cfg(feature = "pt-serde")]
+use serde::{Deserialize, Serialize};
+
 use std::fmt::{self, Display};
 use std::fmt::{self, Display};
 
 
-#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy)]
 /// file no, start offset, end offset (in bytes)
 /// file no, start offset, end offset (in bytes)
+#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub enum Loc {
 pub enum Loc {
     Builtin,
     Builtin,
     CommandLine,
     CommandLine,
@@ -88,6 +92,7 @@ impl Loc {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub struct Identifier {
 pub struct Identifier {
     pub loc: Loc,
     pub loc: Loc,
     pub name: String,
     pub name: String,
@@ -100,6 +105,7 @@ impl Display for Identifier {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub struct IdentifierPath {
 pub struct IdentifierPath {
     pub loc: Loc,
     pub loc: Loc,
     pub identifiers: Vec<Identifier>,
     pub identifiers: Vec<Identifier>,
@@ -121,6 +127,7 @@ impl Display for IdentifierPath {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub enum Comment {
 pub enum Comment {
     Line(Loc, String),
     Line(Loc, String),
     Block(Loc, String),
     Block(Loc, String),
@@ -129,9 +136,11 @@ pub enum Comment {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub struct SourceUnit(pub Vec<SourceUnitPart>);
 pub struct SourceUnit(pub Vec<SourceUnitPart>);
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub enum SourceUnitPart {
 pub enum SourceUnitPart {
     ContractDefinition(Box<ContractDefinition>),
     ContractDefinition(Box<ContractDefinition>),
     PragmaDirective(Loc, Identifier, StringLiteral),
     PragmaDirective(Loc, Identifier, StringLiteral),
@@ -167,6 +176,7 @@ impl SourceUnitPart {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub enum Import {
 pub enum Import {
     Plain(StringLiteral, Loc),
     Plain(StringLiteral, Loc),
     GlobalSymbol(StringLiteral, Identifier, Loc),
     GlobalSymbol(StringLiteral, Identifier, Loc),
@@ -186,6 +196,7 @@ impl Import {
 pub type ParameterList = Vec<(Loc, Option<Parameter>)>;
 pub type ParameterList = Vec<(Loc, Option<Parameter>)>;
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub enum Type {
 pub enum Type {
     Address,
     Address,
     AddressPayable,
     AddressPayable,
@@ -205,7 +216,8 @@ pub enum Type {
     },
     },
 }
 }
 
 
-#[derive(Debug, Clone, PartialEq, Eq)]
+#[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub enum StorageLocation {
 pub enum StorageLocation {
     Memory(Loc),
     Memory(Loc),
     Storage(Loc),
     Storage(Loc),
@@ -233,6 +245,7 @@ impl fmt::Display for StorageLocation {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub struct VariableDeclaration {
 pub struct VariableDeclaration {
     pub loc: Loc,
     pub loc: Loc,
     pub ty: Expression,
     pub ty: Expression,
@@ -241,6 +254,7 @@ pub struct VariableDeclaration {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 #[allow(clippy::vec_box)]
 #[allow(clippy::vec_box)]
 pub struct StructDefinition {
 pub struct StructDefinition {
     pub loc: Loc,
     pub loc: Loc,
@@ -249,6 +263,7 @@ pub struct StructDefinition {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub enum ContractPart {
 pub enum ContractPart {
     StructDefinition(Box<StructDefinition>),
     StructDefinition(Box<StructDefinition>),
     EventDefinition(Box<EventDefinition>),
     EventDefinition(Box<EventDefinition>),
@@ -279,12 +294,14 @@ impl ContractPart {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub enum UsingList {
 pub enum UsingList {
     Library(IdentifierPath),
     Library(IdentifierPath),
     Functions(Vec<IdentifierPath>),
     Functions(Vec<IdentifierPath>),
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub struct Using {
 pub struct Using {
     pub loc: Loc,
     pub loc: Loc,
     pub list: UsingList,
     pub list: UsingList,
@@ -293,6 +310,7 @@ pub struct Using {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub enum ContractTy {
 pub enum ContractTy {
     Abstract(Loc),
     Abstract(Loc),
     Contract(Loc),
     Contract(Loc),
@@ -312,6 +330,7 @@ impl fmt::Display for ContractTy {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub struct Base {
 pub struct Base {
     pub loc: Loc,
     pub loc: Loc,
     pub name: IdentifierPath,
     pub name: IdentifierPath,
@@ -319,6 +338,7 @@ pub struct Base {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub struct ContractDefinition {
 pub struct ContractDefinition {
     pub loc: Loc,
     pub loc: Loc,
     pub ty: ContractTy,
     pub ty: ContractTy,
@@ -328,6 +348,7 @@ pub struct ContractDefinition {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub struct EventParameter {
 pub struct EventParameter {
     pub ty: Expression,
     pub ty: Expression,
     pub loc: Loc,
     pub loc: Loc,
@@ -336,6 +357,7 @@ pub struct EventParameter {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub struct EventDefinition {
 pub struct EventDefinition {
     pub loc: Loc,
     pub loc: Loc,
     pub name: Identifier,
     pub name: Identifier,
@@ -344,6 +366,7 @@ pub struct EventDefinition {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub struct ErrorParameter {
 pub struct ErrorParameter {
     pub ty: Expression,
     pub ty: Expression,
     pub loc: Loc,
     pub loc: Loc,
@@ -351,6 +374,7 @@ pub struct ErrorParameter {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub struct ErrorDefinition {
 pub struct ErrorDefinition {
     pub loc: Loc,
     pub loc: Loc,
     pub name: Identifier,
     pub name: Identifier,
@@ -358,6 +382,7 @@ pub struct ErrorDefinition {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub struct EnumDefinition {
 pub struct EnumDefinition {
     pub loc: Loc,
     pub loc: Loc,
     pub name: Identifier,
     pub name: Identifier,
@@ -365,6 +390,7 @@ pub struct EnumDefinition {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub enum VariableAttribute {
 pub enum VariableAttribute {
     Visibility(Visibility),
     Visibility(Visibility),
     Constant(Loc),
     Constant(Loc),
@@ -373,6 +399,7 @@ pub enum VariableAttribute {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub struct VariableDefinition {
 pub struct VariableDefinition {
     pub loc: Loc,
     pub loc: Loc,
     pub ty: Expression,
     pub ty: Expression,
@@ -382,6 +409,7 @@ pub struct VariableDefinition {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub struct TypeDefinition {
 pub struct TypeDefinition {
     pub loc: Loc,
     pub loc: Loc,
     pub name: Identifier,
     pub name: Identifier,
@@ -389,6 +417,7 @@ pub struct TypeDefinition {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub struct StringLiteral {
 pub struct StringLiteral {
     pub loc: Loc,
     pub loc: Loc,
     pub unicode: bool,
     pub unicode: bool,
@@ -396,12 +425,14 @@ pub struct StringLiteral {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub struct HexLiteral {
 pub struct HexLiteral {
     pub loc: Loc,
     pub loc: Loc,
     pub hex: String,
     pub hex: String,
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub struct NamedArgument {
 pub struct NamedArgument {
     pub loc: Loc,
     pub loc: Loc,
     pub name: Identifier,
     pub name: Identifier,
@@ -409,6 +440,7 @@ pub struct NamedArgument {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub enum Unit {
 pub enum Unit {
     Seconds(Loc),
     Seconds(Loc),
     Minutes(Loc),
     Minutes(Loc),
@@ -421,6 +453,7 @@ pub enum Unit {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub enum Expression {
 pub enum Expression {
     PostIncrement(Loc, Box<Expression>),
     PostIncrement(Loc, Box<Expression>),
     PostDecrement(Loc, Box<Expression>),
     PostDecrement(Loc, Box<Expression>),
@@ -578,7 +611,8 @@ impl Expression {
     }
     }
 }
 }
 
 
-#[derive(Clone, Debug, PartialEq, Eq)]
+#[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub struct Parameter {
 pub struct Parameter {
     pub loc: Loc,
     pub loc: Loc,
     pub ty: Expression,
     pub ty: Expression,
@@ -587,6 +621,7 @@ pub struct Parameter {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub enum Mutability {
 pub enum Mutability {
     Pure(Loc),
     Pure(Loc),
     View(Loc),
     View(Loc),
@@ -616,6 +651,7 @@ impl CodeLocation for Mutability {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub enum Visibility {
 pub enum Visibility {
     External(Option<Loc>),
     External(Option<Loc>),
     Public(Option<Loc>),
     Public(Option<Loc>),
@@ -645,7 +681,9 @@ impl OptionalCodeLocation for Visibility {
     }
     }
 }
 }
 
 
-#[derive(Debug, Clone, PartialEq, Eq)]
+#[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
+
 pub enum FunctionAttribute {
 pub enum FunctionAttribute {
     Mutability(Mutability),
     Mutability(Mutability),
     Visibility(Visibility),
     Visibility(Visibility),
@@ -657,6 +695,7 @@ pub enum FunctionAttribute {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone, Copy)]
 #[derive(Debug, PartialEq, Eq, Clone, Copy)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub enum FunctionTy {
 pub enum FunctionTy {
     Constructor,
     Constructor,
     Function,
     Function,
@@ -678,6 +717,7 @@ impl fmt::Display for FunctionTy {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub struct FunctionDefinition {
 pub struct FunctionDefinition {
     pub loc: Loc,
     pub loc: Loc,
     pub ty: FunctionTy,
     pub ty: FunctionTy,
@@ -691,6 +731,7 @@ pub struct FunctionDefinition {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 #[allow(clippy::large_enum_variant, clippy::type_complexity)]
 #[allow(clippy::large_enum_variant, clippy::type_complexity)]
 pub enum Statement {
 pub enum Statement {
     Block {
     Block {
@@ -732,12 +773,14 @@ pub enum Statement {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub enum CatchClause {
 pub enum CatchClause {
     Simple(Loc, Option<Parameter>, Statement),
     Simple(Loc, Option<Parameter>, Statement),
     Named(Loc, Identifier, Parameter, Statement),
     Named(Loc, Identifier, Parameter, Statement),
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub enum YulStatement {
 pub enum YulStatement {
     Assign(Loc, Vec<YulExpression>, YulExpression),
     Assign(Loc, Vec<YulExpression>, YulExpression),
     VariableDeclaration(Loc, Vec<YulTypedIdentifier>, Option<YulExpression>),
     VariableDeclaration(Loc, Vec<YulTypedIdentifier>, Option<YulExpression>),
@@ -751,7 +794,9 @@ pub enum YulStatement {
     FunctionDefinition(Box<YulFunctionDefinition>),
     FunctionDefinition(Box<YulFunctionDefinition>),
     FunctionCall(Box<YulFunctionCall>),
     FunctionCall(Box<YulFunctionCall>),
 }
 }
-#[derive(PartialEq, Eq, Clone, Debug)]
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub struct YulSwitch {
 pub struct YulSwitch {
     pub loc: Loc,
     pub loc: Loc,
     pub condition: YulExpression,
     pub condition: YulExpression,
@@ -759,7 +804,8 @@ pub struct YulSwitch {
     pub default: Option<YulSwitchOptions>,
     pub default: Option<YulSwitchOptions>,
 }
 }
 
 
-#[derive(PartialEq, Eq, Clone, Debug)]
+#[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub struct YulFor {
 pub struct YulFor {
     pub loc: Loc,
     pub loc: Loc,
     pub init_block: YulBlock,
     pub init_block: YulBlock,
@@ -769,12 +815,14 @@ pub struct YulFor {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub struct YulBlock {
 pub struct YulBlock {
     pub loc: Loc,
     pub loc: Loc,
     pub statements: Vec<YulStatement>,
     pub statements: Vec<YulStatement>,
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub enum YulExpression {
 pub enum YulExpression {
     BoolLiteral(Loc, bool, Option<Identifier>),
     BoolLiteral(Loc, bool, Option<Identifier>),
     NumberLiteral(Loc, String, String, Option<Identifier>),
     NumberLiteral(Loc, String, String, Option<Identifier>),
@@ -787,6 +835,7 @@ pub enum YulExpression {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub struct YulTypedIdentifier {
 pub struct YulTypedIdentifier {
     pub loc: Loc,
     pub loc: Loc,
     pub id: Identifier,
     pub id: Identifier,
@@ -794,6 +843,7 @@ pub struct YulTypedIdentifier {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub struct YulFunctionDefinition {
 pub struct YulFunctionDefinition {
     pub loc: Loc,
     pub loc: Loc,
     pub id: Identifier,
     pub id: Identifier,
@@ -803,6 +853,7 @@ pub struct YulFunctionDefinition {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub struct YulFunctionCall {
 pub struct YulFunctionCall {
     pub loc: Loc,
     pub loc: Loc,
     pub id: Identifier,
     pub id: Identifier,
@@ -810,6 +861,7 @@ pub struct YulFunctionCall {
 }
 }
 
 
 #[derive(Debug, PartialEq, Eq, Clone)]
 #[derive(Debug, PartialEq, Eq, Clone)]
+#[cfg_attr(feature = "pt-serde", derive(Serialize, Deserialize))]
 pub enum YulSwitchOptions {
 pub enum YulSwitchOptions {
     Case(Loc, YulExpression, YulBlock),
     Case(Loc, YulExpression, YulBlock),
     Default(Loc, YulBlock),
     Default(Loc, YulBlock),