A vibe coded tangled fork which supports pijul.
at 1237bf9f58e4ba5d13d5437f2f82a2078572e229 60 lines 1.6 kB view raw
1package xrpc 2 3import ( 4 "database/sql" 5 "encoding/json" 6 "log/slog" 7 "net/http" 8 9 "github.com/go-chi/chi/v5" 10 "tangled.org/core/api/tangled" 11 "tangled.org/core/idresolver" 12 "tangled.org/core/knotmirror/config" 13) 14 15type Xrpc struct { 16 cfg *config.Config 17 db *sql.DB 18 resolver *idresolver.Resolver 19 logger *slog.Logger 20} 21 22func New(logger *slog.Logger, cfg *config.Config, db *sql.DB, resolver *idresolver.Resolver) *Xrpc { 23 return &Xrpc{ 24 cfg, 25 db, 26 resolver, 27 logger, 28 } 29} 30 31func (x *Xrpc) Router() http.Handler { 32 r := chi.NewRouter() 33 34 r.Route("/xrpc", func(r chi.Router) { 35 r.Get("/"+tangled.GitTempGetArchiveNSID, x.GetArchive) 36 r.Get("/"+tangled.GitTempGetBlobNSID, x.GetBlob) 37 r.Get("/"+tangled.GitTempGetBranchNSID, x.GetBranch) 38 // r.Get("/"+tangled.GitTempGetCommitNSID, x.GetCommit) // todo 39 // r.Get("/"+tangled.GitTempGetDiffNSID, x.GetDiff) // todo 40 // r.Get("/"+tangled.GitTempGetEntityNSID, x.GetEntity) // todo 41 // r.Get("/"+tangled.GitTempGetHeadNSID, x.GetHead) // todo 42 r.Get("/"+tangled.GitTempGetTagNSID, x.GetTag) // using types.Response 43 r.Get("/"+tangled.GitTempGetTreeNSID, x.GetTree) 44 r.Get("/"+tangled.GitTempListBranchesNSID, x.ListBranches) // wip, unknown output 45 r.Get("/"+tangled.GitTempListCommitsNSID, x.ListCommits) 46 r.Get("/"+tangled.GitTempListLanguagesNSID, x.ListLanguages) 47 r.Get("/"+tangled.GitTempListTagsNSID, x.ListTags) 48 }) 49 50 return r 51} 52 53func writeJson(w http.ResponseWriter, status int, response any) error { 54 w.Header().Set("Content-Type", "application/json") 55 w.WriteHeader(status) 56 if err := json.NewEncoder(w).Encode(response); err != nil { 57 return err 58 } 59 return nil 60}