1
0
mirror of https://github.com/minio/mc.git synced 2025-11-12 01:02:26 +03:00
Files
mc/pkg/client/client.go
2015-04-11 21:32:25 -07:00

86 lines
2.4 KiB
Go

/*
* Modern Copy, (C) 2015 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 client
import (
"io"
"regexp"
"time"
)
// Client - client interface
type Client interface {
// Bucket operations
PutBucket(bucket string) error
StatBucket(bucket string) error
ListBuckets() ([]*Bucket, error)
ListObjects(bucket, keyPrefix string) (items []*Item, err error)
// Object operations
Get(bucket, object string) (body io.ReadCloser, size int64, md5 string, err error)
GetPartial(bucket, key string, offset, length int64) (body io.ReadCloser, size int64, md5 string, err error)
Put(bucket, object, md5 string, size int64) (io.WriteCloser, error)
StatObject(bucket, object string) (size int64, date time.Time, err error)
}
// Bucket - carries s3 bucket reply header
type Bucket struct {
Name string
CreationDate time.Time // 2006-02-03T16:45:09.000Z
}
// Item - object item list
type Item struct {
Key string
LastModified time.Time
Size int64
}
// Prefix - common prefix
type Prefix struct {
Prefix string
}
// IsValidBucketName reports whether bucket is a valid bucket name, per Amazon's naming restrictions.
// See http://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html
func IsValidBucketName(bucket string) bool {
if len(bucket) < 3 || len(bucket) > 63 {
return false
}
if bucket[0] == '.' || bucket[len(bucket)-1] == '.' {
return false
}
if match, _ := regexp.MatchString("\\.\\.", bucket); match == true {
return false
}
// We don't support buckets with '.' in them
match, _ := regexp.MatchString("^[a-zA-Z][a-zA-Z0-9\\-]+[a-zA-Z0-9]$", bucket)
return match
}
// BySize implements sort.Interface for []Item based on the Size field.
type BySize []*Item
// Len -
func (a BySize) Len() int { return len(a) }
// Swap -
func (a BySize) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
// Less -
func (a BySize) Less(i, j int) bool { return a[i].Size < a[j].Size }