1*ba677afaSXin Li// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 2*ba677afaSXin Li 3*ba677afaSXin Lipackage common 4*ba677afaSXin Li 5*ba677afaSXin Liimport ( 6*ba677afaSXin Li "encoding/json" 7*ba677afaSXin Li "fmt" 8*ba677afaSXin Li "strings" 9*ba677afaSXin Li) 10*ba677afaSXin Li 11*ba677afaSXin Litype Annotator struct { 12*ba677afaSXin Li Annotator string 13*ba677afaSXin Li // including AnnotatorType: one of "Person", "Organization" or "Tool" 14*ba677afaSXin Li AnnotatorType string 15*ba677afaSXin Li} 16*ba677afaSXin Li 17*ba677afaSXin Li// UnmarshalJSON takes an annotator in the typical one-line format and parses it into an Annotator struct. 18*ba677afaSXin Li// This function is also used when unmarshalling YAML 19*ba677afaSXin Lifunc (a *Annotator) UnmarshalJSON(data []byte) error { 20*ba677afaSXin Li // annotator will simply be a string 21*ba677afaSXin Li annotatorStr := string(data) 22*ba677afaSXin Li annotatorStr = strings.Trim(annotatorStr, "\"") 23*ba677afaSXin Li 24*ba677afaSXin Li annotatorFields := strings.SplitN(annotatorStr, ": ", 2) 25*ba677afaSXin Li 26*ba677afaSXin Li if len(annotatorFields) != 2 { 27*ba677afaSXin Li return fmt.Errorf("failed to parse Annotator '%s'", annotatorStr) 28*ba677afaSXin Li } 29*ba677afaSXin Li 30*ba677afaSXin Li a.AnnotatorType = annotatorFields[0] 31*ba677afaSXin Li a.Annotator = annotatorFields[1] 32*ba677afaSXin Li 33*ba677afaSXin Li return nil 34*ba677afaSXin Li} 35*ba677afaSXin Li 36*ba677afaSXin Li// MarshalJSON converts the receiver into a slice of bytes representing an Annotator in string form. 37*ba677afaSXin Li// This function is also used when marshalling to YAML 38*ba677afaSXin Lifunc (a Annotator) MarshalJSON() ([]byte, error) { 39*ba677afaSXin Li if a.Annotator != "" { 40*ba677afaSXin Li return json.Marshal(fmt.Sprintf("%s: %s", a.AnnotatorType, a.Annotator)) 41*ba677afaSXin Li } 42*ba677afaSXin Li 43*ba677afaSXin Li return []byte{}, nil 44*ba677afaSXin Li} 45