// Copyright © 2018 Inanc Gumus // Learn Go Programming Course // License: https://creativecommons.org/licenses/by-nc-sa/4.0/ // // For more tutorials : https://learngoprogramming.com // In-person training : https://www.linkedin.com/in/inancgumus/ // Follow me on twitter: https://twitter.com/inancgumus /* This lecture will be added later */ package main import ( "bufio" "encoding/json" "fmt" "os" ) type user struct { Name string `json:"username"` Permissions map[string]bool `json:"perms"` Devices []struct { Name string `json:"name"` Battery int `json:"battery"` } `json:"devices"` } // type device struct { // Name string `json:"name"` // Battery int `json:"battery"` // } func main() { var input []byte for in := bufio.NewScanner(os.Stdin); in.Scan(); { input = append(input, in.Bytes()...) } var users []user if err := json.Unmarshal(input, &users); err != nil { fmt.Println(err) return } for _, user := range users { fmt.Print("+ ", user.Name) switch p := user.Permissions; { case p == nil: fmt.Print(" has no power.") case p["admin"]: fmt.Print(" is an admin.") case p["write"]: fmt.Print(" can write.") } for _, device := range user.Devices { fmt.Printf("\n\t[ %-10s: %d%% ]", device.Name, device.Battery) } fmt.Println() } }