initial structure - reads cli arguments
parent
c9ea33d4fa
commit
af8e7ebedb
@ -0,0 +1,25 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"git.buddy.wtf/challenges/buckets-of-fun/lib/application"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
if err := run(); err != nil {
|
||||||
|
fmt.Fprintln(os.Stderr, err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func run() error {
|
||||||
|
flag.Parse()
|
||||||
|
app, err := application.New(flag.Args()...)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return app.Run()
|
||||||
|
}
|
@ -0,0 +1,3 @@
|
|||||||
|
module git.buddy.wtf/challenges/buckets-of-fun
|
||||||
|
|
||||||
|
go 1.13
|
@ -0,0 +1,51 @@
|
|||||||
|
package application
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"git.buddy.wtf/challenges/buckets-of-fun/lib/bucket"
|
||||||
|
)
|
||||||
|
|
||||||
|
// App holds context for the application
|
||||||
|
type App struct {
|
||||||
|
Target uint64
|
||||||
|
Buckets []bucket.Bucket
|
||||||
|
}
|
||||||
|
|
||||||
|
// New returns an instance of the app
|
||||||
|
func New(args ...string) (*App, error) {
|
||||||
|
if len(args) < 2 {
|
||||||
|
msg := fmt.Sprintf("usage error: requires at least 2 arguments, received %d", len(args))
|
||||||
|
return nil, errors.New(msg)
|
||||||
|
}
|
||||||
|
target, err := strconv.ParseUint(args[0], 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.New("target must be a positive integer: " + err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
app := App{
|
||||||
|
Target: target,
|
||||||
|
Buckets: []bucket.Bucket{},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, arg := range args[1:] {
|
||||||
|
capacity, err := strconv.ParseUint(arg, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.New("bucket capacity must be a positive integer: " + err.Error())
|
||||||
|
}
|
||||||
|
app.Buckets = append(app.Buckets, bucket.Bucket{Capacity: capacity})
|
||||||
|
}
|
||||||
|
|
||||||
|
return &app, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run runs the application
|
||||||
|
func (a *App) Run() error {
|
||||||
|
fmt.Printf("target: %d\n", a.Target)
|
||||||
|
for i, bucket := range a.Buckets {
|
||||||
|
fmt.Printf("bucket %d: %d\n", i+1, bucket.Capacity)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
package bucket
|
||||||
|
|
||||||
|
// Bucket to store volume
|
||||||
|
type Bucket struct {
|
||||||
|
// Capacity amount the bucket can store
|
||||||
|
Capacity uint64
|
||||||
|
// Volume is the current volume of the bucket
|
||||||
|
Volume uint64
|
||||||
|
}
|
Loading…
Reference in New Issue