diff options
| author | Adam Izraelevitz | 2020-03-06 18:03:55 -0800 |
|---|---|---|
| committer | GitHub | 2020-03-07 02:03:55 +0000 |
| commit | dd72b24dde5b28aef4a3728fdb770e26f5dbc54d (patch) | |
| tree | 908ab02e878509a1734562851baa82732cfa8d18 /src/main/scala/firrtl/annotations | |
| parent | 140a29a851a9e5b0b1cd486cc5ba53c3ff763f27 (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.scala | 36 |
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 */ |
