git.sophuwu.com > byterate   
              89
            
             # byterate

Library and command line tool to calculate the time it takes to transfer a file at a given rate.

## Library Usage

```go
package main

import (
    "fmt"
    "sophuwu.site/byterate"
)

func main() {
    size, err := byterate.ParseSize("1gb")
	if err != nil {
		panic(err)
	}
    rate, err := byterate.ParseSize("1mbit")
	if err != nil {
		panic(err)
    }
    endTime, duration, err := byterate.Time(size, rate)
	if err != nil {
		panic(err)
    }
    fmt.Printf("End Time: %s\n", endTime)
    fmt.Printf("Duration: %s\n", duration)
	}
}
```

## Command Line Usage

```sh
byterate [options] <size> <rate>
```

### Options:
+ `-h` `--help` Show the help message.
+ `-d` `--duration` Print the duration of the transfer.
+ `-t` `--time` Print the time the transfer will end.

if no options are given, duration will be printed.

### Arguments:
+ `<size>` is the size of the file to transfer.
+ `<rate>` is the transfer rate as a size, always per second.

### Arguments Format:
`<size>` and `<rate>` are numbers with optional SI prefixes and units.

#### Supported units:
+ `b` for bytes
+ `bit` for bits

If no unit is given, bytes are assumed.

#### SI Prefixes:
The prefixes are case-insensitive. The prefixes are in base 10 by default. To use base 2, add an `i` to the prefix.

Base 10 prefixes: `k` `m` `g` `t` `p` `e` `z` `y`

Base 2 prefixes: `ki` `mi` `gi` `ti` `pi` `ei` `zi` `yi`

### Examples:

Duration of 10 GiB at 120 mbps:\
`byterate 10gib 120mbit`

The completion time of 16 MiB at 1.2 MiB/s:\
`byterate -t 16mib 1.2mib`

The duration and completion time of 15 GB at 1.5 MB/s:\
`byterate -dt 15g 1.5m`

## Installation

```sh
git clone sophuwu.site/byterate
cd byterate
go build -trimpath -ldflags="-s -w" -o build/byterate cmd/cli.go
sudo install build/byterate /usr/local/bin/byterate
```

## License

MIT