From 8b8232f1ed71df7e4eb76773a7bebed28165f75a Mon Sep 17 00:00:00 2001 From: Cory Slep Date: Sat, 5 Jan 2019 16:52:47 +0100 Subject: [PATCH] Add serialization and comparison for xsd:anyURI --- tools/exp/rdf/xsd/ontology.go | 42 ++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/tools/exp/rdf/xsd/ontology.go b/tools/exp/rdf/xsd/ontology.go index 6cdcc9f..f8aeec7 100644 --- a/tools/exp/rdf/xsd/ontology.go +++ b/tools/exp/rdf/xsd/ontology.go @@ -204,21 +204,57 @@ func (a *anyURI) Apply(key string, value interface{}, ctx *rdf.ParsingContext) ( anyURISpec, jen.Op("*").Qual("net/url", "URL"), []jen.Code{ - // TODO + jen.Return( + jen.Id(codegen.This()).Dot("String").Call(), + jen.Nil(), + ), }), DeserializeFn: rdf.DeserializeValueFunction( a.pkg, anyURISpec, jen.Op("*").Qual("net/url", "URL"), []jen.Code{ - // TODO + jen.Var().Id("u").Op("*").Qual("net/url", "URL"), + jen.Var().Err().Error(), + jen.If( + jen.List( + jen.Id("s"), + jen.Id("ok"), + ).Op(":=").Id(codegen.This()).Assert(jen.String()), + jen.Id("ok"), + ).Block( + jen.List( + jen.Id("u"), + jen.Err(), + ).Op("=").Qual("net/url", "Parse").Call(jen.Id("s")), + jen.If( + jen.Err().Op("!=").Nil(), + ).Block( + jen.Err().Op("=").Qual("fmt", "Errorf").Call( + jen.Lit("%v cannot be interpreted as a xsd:anyURI: %s"), + jen.Id(codegen.This()), + jen.Err(), + ), + ), + ).Else().Block( + jen.Err().Op("=").Qual("fmt", "Errorf").Call( + jen.Lit("%v cannot be interpreted as a string for xsd:anyURI"), + jen.Id(codegen.This()), + ), + ), + jen.Return(jen.List( + jen.Id("u"), + jen.Err(), + )), }), LessFn: rdf.LessFunction( a.pkg, anyURISpec, jen.Op("*").Qual("net/url", "URL"), []jen.Code{ - // TODO + jen.Return( + jen.Id("lhs").Dot("String").Call().Op("<").Id("rhs").Dot("String").Call(), + ), }), } if err = v.SetValue(anyURISpec, val); err != nil {