github.com/attic-labs/noms@v0.0.0-20210827224422-e5fa29d95e8b/samples/go/hr/main.go (about) 1 // Copyright 2016 Attic Labs, Inc. All rights reserved. 2 // Licensed under the Apache License, version 2.0: 3 // http://www.apache.org/licenses/LICENSE-2.0 4 5 package main 6 7 import ( 8 "fmt" 9 "os" 10 11 "github.com/attic-labs/kingpin" 12 13 "github.com/attic-labs/noms/go/config" 14 "github.com/attic-labs/noms/go/datas" 15 "github.com/attic-labs/noms/go/marshal" 16 "github.com/attic-labs/noms/go/types" 17 "github.com/attic-labs/noms/go/util/verbose" 18 ) 19 20 func main() { 21 app := kingpin.New("hr", "") 22 var dsStr = app.Flag("ds", "noms dataset to read/write from").Required().String() 23 24 addCmd := app.Command("add-person", "Add a new person") 25 id := addCmd.Arg("id", "unique person id").Required().Uint64() 26 name := addCmd.Arg("name", "person name").Required().String() 27 title := addCmd.Arg("title", "person title").Required().String() 28 29 app.Command("list-persons", "list current persons") 30 31 verbose.RegisterVerboseFlags(app) 32 cmd := kingpin.MustParse(app.Parse(os.Args[1:])) 33 cfg := config.NewResolver() 34 db, ds, err := cfg.GetDataset(*dsStr) 35 if err != nil { 36 fmt.Fprintf(os.Stderr, "Could not create dataset: %s\n", err) 37 return 38 } 39 defer db.Close() 40 41 switch cmd { 42 case "add-person": 43 addPerson(db, ds, *id, *name, *title) 44 case "list-persons": 45 listPersons(ds) 46 } 47 } 48 49 type Person struct { 50 Name, Title string 51 Id uint64 52 } 53 54 func addPerson(db datas.Database, ds datas.Dataset, id uint64, name, title string) { 55 np, err := marshal.Marshal(db, Person{name, title, id}) 56 if err != nil { 57 fmt.Fprintln(os.Stderr, err) 58 return 59 } 60 61 _, err = db.CommitValue(ds, getPersons(ds).Edit().Set(types.Number(id), np).Map()) 62 if err != nil { 63 fmt.Fprintf(os.Stderr, "Error committing: %s\n", err) 64 return 65 } 66 } 67 68 func listPersons(ds datas.Dataset) { 69 d := getPersons(ds) 70 if d.Empty() { 71 fmt.Println("No people found") 72 return 73 } 74 75 d.IterAll(func(k, v types.Value) { 76 var p Person 77 err := marshal.Unmarshal(v, &p) 78 if err != nil { 79 fmt.Fprintln(os.Stderr, err) 80 return 81 } 82 fmt.Printf("%s (id: %d, title: %s)\n", p.Name, p.Id, p.Title) 83 }) 84 } 85 86 func getPersons(ds datas.Dataset) types.Map { 87 hv, ok := ds.MaybeHeadValue() 88 if ok { 89 return hv.(types.Map) 90 } 91 return types.NewMap(ds.Database()) 92 }