Browse Source
Merge pull request #68 from harshavardhana/pr_out_strbyteconv_stringtobytes_bytestostring_
Merge pull request #68 from harshavardhana/pr_out_strbyteconv_stringtobytes_bytestostring_
strbyteconv - - StringToBytes() - BytesToString()pull/1/head

2 changed files with 155 additions and 0 deletions
@ -0,0 +1,93 @@ |
|||
/* |
|||
* Mini Object Storage, (C) 2014 Minio, Inc. |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0
|
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
*/ |
|||
|
|||
package strbyteconv |
|||
|
|||
import ( |
|||
"errors" |
|||
"fmt" |
|||
"regexp" |
|||
"strconv" |
|||
"strings" |
|||
) |
|||
|
|||
const ( |
|||
UNIT_BYTE = 1 |
|||
UNIT_KILOBYTE = 1024 * UNIT_BYTE |
|||
UNIT_MEGABYTE = 1024 * UNIT_KILOBYTE |
|||
UNIT_GIGABYTE = 1024 * UNIT_MEGABYTE |
|||
UNIT_TERABYTE = 1024 * UNIT_GIGABYTE |
|||
) |
|||
|
|||
func BytesToString(bytes uint64) string { |
|||
var unit string = "B" |
|||
var value uint64 = 0 |
|||
|
|||
switch { |
|||
case bytes >= UNIT_TERABYTE: |
|||
unit = "TB" |
|||
value = uint64(bytes / UNIT_TERABYTE) |
|||
case bytes >= UNIT_GIGABYTE: |
|||
unit = "GB" |
|||
value = uint64(bytes / UNIT_GIGABYTE) |
|||
case bytes >= UNIT_MEGABYTE: |
|||
unit = "MB" |
|||
value = uint64(bytes / UNIT_MEGABYTE) |
|||
case bytes >= UNIT_KILOBYTE: |
|||
unit = "KB" |
|||
value = uint64(bytes / UNIT_KILOBYTE) |
|||
case bytes < UNIT_KILOBYTE && bytes >= UNIT_BYTE: |
|||
unit = "B" |
|||
value = uint64(bytes / UNIT_BYTE) |
|||
} |
|||
|
|||
return fmt.Sprintf("%d%s", value, unit) |
|||
} |
|||
|
|||
func StringToBytes(s string) (uint64, error) { |
|||
var bytes uint64 |
|||
|
|||
StringPattern, err := regexp.Compile(`(?i)^(-?\d+)([KMGT])B?$`) |
|||
if err != nil { |
|||
return 0, err |
|||
} |
|||
|
|||
parts := StringPattern.FindStringSubmatch(strings.TrimSpace(s)) |
|||
if len(parts) < 3 { |
|||
return 0, errors.New("Incorrect string format must be K,KB,M,MB,G,GB") |
|||
} |
|||
|
|||
value, err := strconv.ParseUint(parts[1], 10, 0) |
|||
if err != nil || value < 1 { |
|||
return 0, err |
|||
} |
|||
|
|||
unit := strings.ToUpper(parts[2]) |
|||
switch unit { |
|||
case "T": |
|||
bytes = value * UNIT_TERABYTE |
|||
case "G": |
|||
bytes = value * UNIT_GIGABYTE |
|||
case "M": |
|||
bytes = value * UNIT_MEGABYTE |
|||
case "K": |
|||
bytes = value * UNIT_KILOBYTE |
|||
case "B": |
|||
bytes = value * UNIT_BYTE |
|||
} |
|||
|
|||
return bytes, nil |
|||
} |
@ -0,0 +1,62 @@ |
|||
/* |
|||
* Mini Object Storage, (C) 2014 Minio, Inc. |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0
|
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
*/ |
|||
|
|||
package strbyteconv |
|||
|
|||
import ( |
|||
. "gopkg.in/check.v1" |
|||
"testing" |
|||
) |
|||
|
|||
type MySuite struct{} |
|||
|
|||
var _ = Suite(&MySuite{}) |
|||
|
|||
func Test(t *testing.T) { TestingT(t) } |
|||
|
|||
func (s *MySuite) Test(c *C) { |
|||
value := BytesToString(100 * UNIT_BYTE) |
|||
c.Assert(value, Equals, "100B") |
|||
|
|||
value = BytesToString(100 * UNIT_KILOBYTE) |
|||
c.Assert(value, Equals, "100KB") |
|||
|
|||
value = BytesToString(100 * UNIT_MEGABYTE) |
|||
c.Assert(value, Equals, "100MB") |
|||
|
|||
value = BytesToString(100 * UNIT_GIGABYTE) |
|||
c.Assert(value, Equals, "100GB") |
|||
|
|||
value = BytesToString(100 * UNIT_TERABYTE) |
|||
c.Assert(value, Equals, "100TB") |
|||
|
|||
bytes, err := StringToBytes("100KB") |
|||
c.Assert(err, IsNil) |
|||
c.Assert(bytes, Equals, uint64(100*UNIT_KILOBYTE)) |
|||
|
|||
bytes, err = StringToBytes("100MB") |
|||
c.Assert(err, IsNil) |
|||
c.Assert(bytes, Equals, uint64(100*UNIT_MEGABYTE)) |
|||
|
|||
bytes, err = StringToBytes("100GB") |
|||
c.Assert(err, IsNil) |
|||
c.Assert(bytes, Equals, uint64(100*UNIT_GIGABYTE)) |
|||
|
|||
bytes, err = StringToBytes("100TB") |
|||
c.Assert(err, IsNil) |
|||
c.Assert(bytes, Equals, uint64(100*UNIT_TERABYTE)) |
|||
|
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue