package main import ( "bytes" "fmt" "os" ) const pipelinePath = "api/org_tangled/cipipeline.go" func replaceOnce(source, old, new []byte) []byte { if bytes.Count(source, old) != 1 { panic(fmt.Sprintf("expected one generated match, got %d", bytes.Count(source, old))) } return bytes.Replace(source, old, new, 1) } func main() { source, err := os.ReadFile(pipelinePath) if err != nil { panic(err) } source = replaceOnce(source, []byte("type CiPipeline_Trigger struct {\n\tEventPush *EventPush\n\tEventPullRequest *EventPullRequest\n\tCiTriggerManual *CiTriggerManual\n}"), []byte("type CiPipeline_Trigger struct {\n\tEventPush *EventPush\n\tEventPullRequest *EventPullRequest\n\tCiTriggerManual *CiTriggerManual\n\tUnknown json.RawMessage\n}"), ) source = replaceOnce(source, []byte("\tif t.CiTriggerManual != nil {\n\t\tt.CiTriggerManual.LexiconTypeID = \"org.tangled.ci.trigger.manual\"\n\t\treturn json.Marshal(t.CiTriggerManual)\n\t}\n\treturn nil, fmt.Errorf(\"cannot marshal empty enum\")"), []byte("\tif t.CiTriggerManual != nil {\n\t\tt.CiTriggerManual.LexiconTypeID = \"org.tangled.ci.trigger.manual\"\n\t\treturn json.Marshal(t.CiTriggerManual)\n\t}\n\tif t.Unknown != nil {\n\t\treturn t.Unknown, nil\n\t}\n\treturn nil, fmt.Errorf(\"cannot marshal empty enum\")"), ) source = replaceOnce(source, []byte("\ttyp, err := util.TypeExtract(b)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tswitch typ {"), []byte("\ttyp, err := util.TypeExtract(b)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t*t = CiPipeline_Trigger{}\n\tswitch typ {"), ) source = replaceOnce(source, []byte("\tdefault:\n\t\treturn nil\n\t}\n}"), []byte("\tdefault:\n\t\tt.Unknown = append(t.Unknown[:0], b...)\n\t\treturn nil\n\t}\n}"), ) if err := os.WriteFile(pipelinePath, source, 0o644); err != nil { panic(err) } }