func (obj *GCSObject) IsRequiredKind(requires []string) bool {
	kindName := obj.ExtractKindName()
	for _, k := range requires {
		if k == kindName {
			return true
		}
	}
	return false
}
IsRequiredKind reports whether the GCSObject is related required kind.
package ds2bq
import (
	"context"
	"encoding/json"
	"fmt"
	"net/http"
	"strings"
	"golang.org/x/oauth2"
	"golang.org/x/oauth2/google"
	"google.golang.org/api/bigquery/v2"
	"google.golang.org/appengine"
	"google.golang.org/appengine/log"
	"google.golang.org/appengine/taskqueue"
	"google.golang.org/appengine/urlfetch"
)
func (obj *GCSObject) ExtractKindName() string {
	if id := obj.extractKindNameForDatastoreAdmin(obj.Name); len(id) > 0 {
		return id
	}
	if id := obj.extractKindNameForDatastoreExport(obj.Name); len(id) > 0 {
		return id
	}
	return ""
}
func (obj *GCSObject) extractKindNameForDatastoreAdmin(name string) string {
	if v := strings.LastIndex(name, "/"); v != -1 {
		name = name[v:]
	}
	vs := strings.Split(name, ".")
	if len(vs) != 3 {
		return ""
	}
	if vs[2] != "backup_info" {
		return ""
	}
	return vs[1]
}
func (obj *GCSObject) extractKindNameForDatastoreExport(name string) string {
	if v := strings.LastIndex(name, "."); v != -1 {
		if name[v:] != ".export_metadata" {
			return ""
		}
	} else {
		return ""
	}
	if v := strings.LastIndex(name, "/"); v != -1 {
		name = name[:v]
	}
	if v := strings.LastIndex(name, "/"); v != -1 {
		name = name[v:]
	}
	return name[len("/kind_"):]
}