func ParseServiceBlock(jw *jsonw.Wrapper) (sb *ServiceBlock, err error) { var social bool var typ, id string if prot, e1 := jw.AtKey("protocol").GetString(); e1 == nil { var hostname string jw.AtKey("hostname").GetStringVoid(&hostname, &e1) if e1 == nil { switch prot { case "http:": typ, id = "http", hostname case "https:": typ, id = "https", hostname } } else if domain, e2 := jw.AtKey("domain").GetString(); e2 == nil && prot == "dns" { typ, id = "dns", domain } } else { var e2 error jw.AtKey("name").GetStringVoid(&typ, &e2) jw.AtKey("username").GetStringVoid(&id, &e2) if e2 != nil { id, typ = "", "" } else { social = true } } if len(typ) == 0 { err = fmt.Errorf("Unrecognized Web proof @%s", jw.MarshalToDebug()) } sb = &ServiceBlock{social: social, typ: typ, id: id} return }