aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/annotations
diff options
context:
space:
mode:
authorAdam Izraelevitz2020-03-06 18:03:55 -0800
committerGitHub2020-03-07 02:03:55 +0000
commitdd72b24dde5b28aef4a3728fdb770e26f5dbc54d (patch)
tree908ab02e878509a1734562851baa82732cfa8d18 /src/main/scala/firrtl/annotations
parent140a29a851a9e5b0b1cd486cc5ba53c3ff763f27 (diff)
Add firrtl-json serializers (#1430)
* Add firrtl-json serializers * Added support for ports, info. Added docs and tests
Diffstat (limited to 'src/main/scala/firrtl/annotations')
-rw-r--r--src/main/scala/firrtl/annotations/JsonProtocol.scala36
1 files changed, 35 insertions, 1 deletions
diff --git a/src/main/scala/firrtl/annotations/JsonProtocol.scala b/src/main/scala/firrtl/annotations/JsonProtocol.scala
index 55043b63..312b826a 100644
--- a/src/main/scala/firrtl/annotations/JsonProtocol.scala
+++ b/src/main/scala/firrtl/annotations/JsonProtocol.scala
@@ -1,7 +1,10 @@
+// See LICENSE for license details.
package firrtl
package annotations
+import firrtl.ir._
+
import scala.util.{Try, Failure}
import org.json4s._
@@ -90,6 +93,35 @@ object JsonProtocol {
{ case JString(s) => Target.deserialize(s).asInstanceOf[CompleteTarget] },
{ case named: CompleteTarget => JString(named.serialize) }
))
+ // FIRRTL Serializers
+ class TypeSerializer extends CustomSerializer[Type](format => (
+ { case JString(s) => Parser.parseType(s) },
+ { case tpe: Type => JString(tpe.serialize) }
+ ))
+ class ExpressionSerializer extends CustomSerializer[Expression](format => (
+ { case JString(s) => Parser.parseExpression(s) },
+ { case expr: Expression => JString(expr.serialize) }
+ ))
+ class StatementSerializer extends CustomSerializer[Statement](format => (
+ { case JString(s) => Parser.parseStatement(s) },
+ { case statement: Statement => JString(statement.serialize) }
+ ))
+ class PortSerializer extends CustomSerializer[Port](format => (
+ { case JString(s) => Parser.parsePort(s) },
+ { case port: Port => JString(port.serialize) }
+ ))
+ class DefModuleSerializer extends CustomSerializer[DefModule](format => (
+ { case JString(s) => Parser.parseDefModule(s) },
+ { case mod: DefModule => JString(mod.serialize) }
+ ))
+ class CircuitSerializer extends CustomSerializer[Circuit](format => (
+ { case JString(s) => Parser.parse(s) },
+ { case cir: Circuit => JString(cir.serialize) }
+ ))
+ class InfoSerializer extends CustomSerializer[Info](format => (
+ { case JString(s) => Parser.parseInfo(s) },
+ { case info: Info => JString(info.serialize) }
+ ))
/** Construct Json formatter for annotations */
def jsonFormat(tags: Seq[Class[_]]) = {
@@ -99,7 +131,9 @@ object JsonProtocol {
new GenericTargetSerializer + new CircuitTargetSerializer + new ModuleTargetSerializer +
new InstanceTargetSerializer + new ReferenceTargetSerializer + new TransformSerializer +
new LoadMemoryFileTypeSerializer + new IsModuleSerializer + new IsMemberSerializer +
- new CompleteTargetSerializer
+ new CompleteTargetSerializer + new TypeSerializer + new ExpressionSerializer +
+ new StatementSerializer + new PortSerializer + new DefModuleSerializer +
+ new CircuitSerializer + new InfoSerializer
}
/** Serialize annotations to a String for emission */