dsl

package
v2.19.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 11, 2021 License: Apache-2.0 Imports: 4 Imported by: 0

Documentation

Overview

Package dsl コード生成用の定義DSL

Index

Constants

View Source
const (
	// DefaultPathFormat デフォルトのパスフォーマット
	DefaultPathFormat = "{{.rootURL}}/{{.zone}}/{{.pathSuffix}}/{{.pathName}}"
	// CloudAPISuffix IaaSリソースでのAPIサフィックス
	CloudAPISuffix = "api/cloud/1.1"
	// BillingAPISuffix 課金関連でのAPIサフィックス
	BillingAPISuffix = "api/system/1.0"
	// WebAccelAPISuffix ウェブアクセラレータ関連でのAPIサフィックス
	WebAccelAPISuffix = "api/webaccel/1.0"
)

Variables

View Source
var (
	// ArgumentID 引数でのIDを示すValue
	ArgumentID = &Argument{
		Name: "id",
		Type: meta.TypeID,
	}
)
View Source
var (
	// DefaultPathFormatWithID デフォルトのパス+IDのパスフォーマット
	DefaultPathFormatWithID = fmt.Sprintf("%s/{{.%s}}", DefaultPathFormat, ArgumentID.ArgName())
)
View Source
var IsOutOfSacloudPackage = false

IsOutOfSacloudPackage コード生成時、*Modelがパッケージ名を付与すべきかの判定に利用するフラグ

View Source
var PayloadForms = struct {
	Singular PayloadForm
	Plural   PayloadForm
}{
	Singular: PayloadForm(0),
	Plural:   PayloadForm(1),
}

PayloadForms ペイロードの形体

Functions

func IDAndSuffixPathFormat

func IDAndSuffixPathFormat(suffix string) string

IDAndSuffixPathFormat デフォルトのパス+ID+指定のサフィックスのパスフォーマット

Types

type Argument

type Argument struct {
	Name            string    // パラメータ名、引数名に利用される
	Type            meta.Type // パラメータの型情報
	PathFormatAlias string    // リクエストパス組み立て時に利用するパラメータ名のエイリアス 省略時はNameとなる
	MapConvTag      string
}

Argument 引数の型情報

func MappableArgument

func MappableArgument(name string, model *Model, destField string) *Argument

MappableArgument 引数定義の追加

func PassthroughModelArgument

func PassthroughModelArgument(name string, model *Model) *Argument

PassthroughModelArgument 引数定義の追加

func (*Argument) ArgName

func (a *Argument) ArgName() string

ArgName 引数の変数名、コード生成で利用される

func (*Argument) ImportStatements

func (a *Argument) ImportStatements() []string

ImportStatements コード生成時に利用するimport文を生成する

func (*Argument) MapConvTagSrc

func (a *Argument) MapConvTagSrc() string

MapConvTagSrc コード上でのmapconvタグの文字列表現。コード生成時に利用する

func (*Argument) PackageName

func (a *Argument) PackageName() string

PackageName インポートパスからパッケージ名を取得する

func (*Argument) PathFormatName

func (a *Argument) PathFormatName() string

PathFormatName リクエストパス組み立て時に利用するパラメータ名の

func (*Argument) TypeName

func (a *Argument) TypeName() string

TypeName 型名の文字列表現、コード生成で利用される

func (*Argument) ZeroInitializer

func (a *Argument) ZeroInitializer() string

ZeroInitializer 値を0初期化する文のコードの文字列表現、コード生成で利用される

func (*Argument) ZeroValueOnSource

func (a *Argument) ZeroValueOnSource() string

ZeroValueOnSource コード上でのゼロ値の文字列表現。コード生成時に利用する

type Arguments

type Arguments []*Argument

Arguments Operationへの引数リスト

type ConstFieldDesc

type ConstFieldDesc struct {
	Name        string
	Tags        *FieldTags
	Type        meta.Type
	Description string // TODO 現在は未使用
	Value       string
}

ConstFieldDesc 固定値フィールド記述

func (*ConstFieldDesc) HasTag

func (f *ConstFieldDesc) HasTag() bool

HasTag タグの定義がなされているか

func (*ConstFieldDesc) TagString

func (f *ConstFieldDesc) TagString() string

TagString タグのソースコード上での表現を返す

func (*ConstFieldDesc) TypeName

func (f *ConstFieldDesc) TypeName() string

TypeName フィールドの型を返す、コード生成で利用される

type EnvelopePayloadDesc

type EnvelopePayloadDesc struct {
	Name string    // ペイロードのフィールド名
	Type meta.Type // ペイロードの型情報
	Tags *FieldTags
}

EnvelopePayloadDesc エンベロープに含まれるペイロードの情報

func (*EnvelopePayloadDesc) TagString

func (d *EnvelopePayloadDesc) TagString() string

TagString タグの文字列表現

func (*EnvelopePayloadDesc) TypeName

func (d *EnvelopePayloadDesc) TypeName() string

TypeName ペイロードの型定義

type EnvelopeType

type EnvelopeType struct {
	Form     PayloadForm // ペイロードの形体(単数/複数)
	Payloads []*EnvelopePayloadDesc
}

EnvelopeType Modelを用いてAPIとやりとりする際のリクエスト/レスポンスのエンベロープ

func RequestEnvelope

func RequestEnvelope(descs ...*EnvelopePayloadDesc) *EnvelopeType

RequestEnvelope リクエストのエンベロープを作成する

func RequestEnvelopeFromModel

func RequestEnvelopeFromModel(model *Model) *EnvelopeType

RequestEnvelopeFromModel モデル定義からリクエストのエンベロープを作成する

func ResponseEnvelope

func ResponseEnvelope(sourceFields ...*EnvelopePayloadDesc) *EnvelopeType

ResponseEnvelope エンベロープから抽出するレスポンス定義の追加

func ResponseEnvelopePlural

func ResponseEnvelopePlural(sourceFields ...*EnvelopePayloadDesc) *EnvelopeType

ResponseEnvelopePlural エンベロープから抽出するレスポンス定義の追加(複数形)

func (*EnvelopeType) IsPlural

func (f *EnvelopeType) IsPlural() bool

IsPlural 複数形か判定

func (*EnvelopeType) IsSingular

func (f *EnvelopeType) IsSingular() bool

IsSingular 単数系か判定

type FieldDesc

type FieldDesc struct {
	Name         string
	Tags         *FieldTags
	Type         meta.Type
	Description  string // TODO 現在は未使用
	Methods      []*MethodDesc
	DefaultValue string // デフォルト値、コード生成時にソースコードに直接転記される
}

FieldDesc フィールド記述

func CloneFieldWithTags added in v2.8.0

func CloneFieldWithTags(f *FieldDesc, tags ...*FieldTags) *FieldDesc

CloneFieldWithTags 指定のフィールドをクローンし指定のタグを設定して返す

func CloneUpdateFieldWithTags added in v2.8.0

func CloneUpdateFieldWithTags(f *FieldDesc, tags ...*FieldTags) *FieldDesc

CloneUpdateFieldWithTags 指定のフィールドのポインタ型をクローンし指定のタグを設定して返す

func (*FieldDesc) HasTag

func (f *FieldDesc) HasTag() bool

HasTag タグの定義がなされているか

func (*FieldDesc) IsRequired

func (f *FieldDesc) IsRequired() bool

IsRequired 必須項目であるかを判定

func (*FieldDesc) SetTags added in v2.8.0

func (f *FieldDesc) SetTags(t *FieldTags)

SetTags タグの設定

func (*FieldDesc) TagString

func (f *FieldDesc) TagString() string

TagString タグのソースコード上での表現を返す

func (*FieldDesc) ToPtrType added in v2.8.0

func (f *FieldDesc) ToPtrType() *FieldDesc

ToPtrType ポインタを受け取る型に変換したFieldDescを返す

func (*FieldDesc) TypeName

func (f *FieldDesc) TypeName() string

TypeName フィールドの型を返す、コード生成で利用される

type FieldTags

type FieldTags struct {
	// JSON jsonタグ
	JSON string
	// YAML yamlタグ
	YAML string
	// Structs structsタグ
	Structs string
	// MapConv mapconvタグ
	MapConv string
	// Validate validateタグ
	Validate string
	// Request requestタグ(service向けmapconvタグ)
	Request string
}

FieldTags フィールドに付与するタグ

func RequestOmitEmptyTag added in v2.8.0

func RequestOmitEmptyTag() *FieldTags

func RequestTag added in v2.8.0

func RequestTag(t string, args ...interface{}) *FieldTags

func ValidateRequiredTag added in v2.8.0

func ValidateRequiredTag() *FieldTags

func ValidateTag added in v2.8.0

func ValidateTag(t string, args ...interface{}) *FieldTags

func (*FieldTags) Empty added in v2.8.0

func (f *FieldTags) Empty() bool

func (*FieldTags) String

func (f *FieldTags) String() string

String FieldTagsの文字列表現

type LockLevel

type LockLevel int

LockLevel APIコール時のロックレベル

const (
	// LockLevelNone ロックなし
	LockLevelNone LockLevel = iota
	// LockLevelResource リソース単位
	LockLevelResource
	// LockLevelAPI API単位
	LockLevelAPI
	// LockLevelGlobal 全API単位
	LockLevelGlobal
)

type MethodDesc

type MethodDesc struct {
	// Name メソッドの名称
	Name string

	// AccessorFuncName sacloud/accessor配下に定義されている、accessorを実装するオブジェクトを
	// 第1引数にとる、exportされているfuncの名称
	//
	// 省略した場合はNameが利用される
	AccessorFuncName string

	// Description 拡張アクセサのgodoc用コメント
	Description string

	// Arguments メソッド引数 省略可能
	Arguments Arguments

	// ResultTypes 戻り値
	ResultTypes []meta.Type
}

MethodDesc モデルにメソッドを持たせるための定義

type Model

type Model struct {
	Name        string            // 型名
	Alias       string            // 型エイリアス(省略可)
	Fields      []*FieldDesc      // フィールド定義
	ConstFields []*ConstFieldDesc // 定数フィールド
	Methods     []*MethodDesc     // アクセサ
	NakedType   meta.Type         // 対応するnaked型の情報
	IsArray     bool
	// contains filtered or unexported fields
}

Model APIのリクエスト/レスポンスなどのデータ型を示すモデル

func (*Model) FieldModels

func (m *Model) FieldModels() []*Model

FieldModels フィールド定義に含まれる*Model(FieldDesc.Type)を取得

func (*Model) GoImportPath

func (m *Model) GoImportPath() string

GoImportPath インポートパス

func (*Model) GoPkg

func (m *Model) GoPkg() string

GoPkg パッケージ名

func (*Model) GoType

func (m *Model) GoType() string

GoType 型名

func (*Model) GoTypeSourceCode

func (m *Model) GoTypeSourceCode() string

GoTypeSourceCode ソースコードでの型表現

func (*Model) HasNakedType

func (m *Model) HasNakedType() bool

HasNakedType 対応するnaked型の情報が登録されているか

func (*Model) ImportStatements

func (m *Model) ImportStatements(additionalImports ...string) []string

ImportStatements コード生成時に利用するimport文を生成する

func (*Model) ImportStatementsForModelDef

func (m *Model) ImportStatementsForModelDef(additionalImports ...string) []string

ImportStatementsForModelDef モデルのフィールドを含めたimport文を生成する

func (*Model) ToPtrType added in v2.8.0

func (m *Model) ToPtrType() meta.Type

ToPtrType ポインタ型への変換

func (*Model) Type

func (m *Model) Type() meta.Type

Type モデルの型情報

func (*Model) ZeroInitializeSourceCode

func (m *Model) ZeroInitializeSourceCode() string

ZeroInitializeSourceCode 型に応じたzero値での初期化コード

func (*Model) ZeroValueSourceCode

func (m *Model) ZeroValueSourceCode() string

ZeroValueSourceCode 型に応じたzero値コード

type Models

type Models []*Model

Models APIのリクエスト/レスポンスなどのデータ型を示すモデル

func (Models) ImportStatements

func (m Models) ImportStatements(additionalImports ...string) []string

ImportStatements コード生成時に利用するimport文を生成する

func (Models) IsEmpty

func (m Models) IsEmpty() bool

IsEmpty 空であるか判定

func (Models) UniqByName

func (m Models) UniqByName() Models

UniqByName NameでユニークなModelの一覧を返す

type Operation

type Operation struct {
	ResourceName        string
	Name                string        // 操作名、メソッド名となる
	Method              string        // HTTPリクエストメソッド GET/POST/PUT/DELETE
	PathFormat          string        // パスのフォーマット、省略した場合はDefaultPathFormatが設定される
	Arguments           Arguments     // 引数の定義
	Results             Results       // レスポンス
	RequestEnvelope     *EnvelopeType // リクエスト時のエンベロープ
	ResponseEnvelope    *EnvelopeType // レスポンス時のエンベロープ
	UseWrappedResult    bool          // trueの場合APIからの戻り値としてラッパー型(xxxResult)を返す
	LockLevel           LockLevel     // APIコール時のロックレベル
	LockKeyCustomFormat string        // ロックキーのgoテンプレートフォーマット(PathFormatと同じパラメータが利用可能)
}

Operation リソースへの操作

func (*Operation) GetPathFormat

func (o *Operation) GetPathFormat() string

GetPathFormat パスのフォーマット

func (*Operation) HasRequestEnvelope

func (o *Operation) HasRequestEnvelope() bool

HasRequestEnvelope リクエストエンベロープが設定されているか

func (*Operation) HasResponseEnvelope

func (o *Operation) HasResponseEnvelope() bool

HasResponseEnvelope レスポンスエンベロープが設定されているか

func (*Operation) HasResults

func (o *Operation) HasResults() bool

HasResults 戻り値が定義されているかを取得

func (*Operation) ImportStatements

func (o *Operation) ImportStatements(additionalImports ...string) []string

ImportStatements コード生成時に利用するimport文を生成する

func (*Operation) IsRequestPlural

func (o *Operation) IsRequestPlural() bool

IsRequestPlural リクエストが複数形か

func (*Operation) IsRequestSingular

func (o *Operation) IsRequestSingular() bool

IsRequestSingular リクエストが単数系か

func (*Operation) IsResponsePlural

func (o *Operation) IsResponsePlural() bool

IsResponsePlural レスポンスが複数形か

func (*Operation) IsResponseSingular

func (o *Operation) IsResponseSingular() bool

IsResponseSingular レスポンスが単数系か

func (*Operation) LockKeyFormat

func (o *Operation) LockKeyFormat() string

LockKeyFormat ロックキーのフォーマット、ロックなしの場合空になる

func (*Operation) MethodName

func (o *Operation) MethodName() string

MethodName コード生成時に利用する、メソッド名を出力する

func (*Operation) Models

func (o *Operation) Models() Models

Models オペレーション配下の(Nameで)ユニークなモデル一覧を取得

func (*Operation) RequestEnvelopeStructName

func (o *Operation) RequestEnvelopeStructName() string

RequestEnvelopeStructName エンベロープのstruct名(camel-case)

func (*Operation) RequestPayloads

func (o *Operation) RequestPayloads() []*EnvelopePayloadDesc

RequestPayloads リクエストペイロードを取得

func (*Operation) ResponseEnvelopeStructName

func (o *Operation) ResponseEnvelopeStructName() string

ResponseEnvelopeStructName エンベロープのstruct名(camel-case)

func (*Operation) ResponsePayloads

func (o *Operation) ResponsePayloads() []*EnvelopePayloadDesc

ResponsePayloads レスポンスペイロードを取得

func (*Operation) ResultTypeName

func (o *Operation) ResultTypeName() string

ResultTypeName API戻り値の型名

func (*Operation) ResultsAssignStatement

func (o *Operation) ResultsAssignStatement() string

ResultsAssignStatement API戻り値を変数にアサインする場合の変数部分のソースを出力、主にtraceで利用する

func (*Operation) ResultsStatement

func (o *Operation) ResultsStatement() string

ResultsStatement 戻り値定義部のソースを出力

func (*Operation) ResultsTypeInfo

func (o *Operation) ResultsTypeInfo() []*ResultTypeInfo

ResultsTypeInfo 戻り値の型情報(error型を含まない)

func (*Operation) ReturnErrorStatement

func (o *Operation) ReturnErrorStatement() string

ReturnErrorStatement コード生成時に利用する、エラーをreturnする文を生成する

func (*Operation) ReturnStatement

func (o *Operation) ReturnStatement() string

ReturnStatement コード生成時に利用するreturn部分を生成する

func (*Operation) StubFieldDefines

func (o *Operation) StubFieldDefines() []string

StubFieldDefines スタブ生成時のフィールド定義文を全フィールド分出力

func (*Operation) StubReturnStatement

func (o *Operation) StubReturnStatement(receiverName string) string

StubReturnStatement スタブ生成時のreturn文

type Operations

type Operations []*Operation

Operations リソースへの操作(スライス)

type PayloadForm

type PayloadForm int

PayloadForm ペイロードの形体

func (PayloadForm) IsPlural

func (f PayloadForm) IsPlural() bool

IsPlural 複数形か判定

func (PayloadForm) IsSingular

func (f PayloadForm) IsSingular() bool

IsSingular 単数系か判定

type Resource

type Resource struct {
	Name       string     // リソース名 e.g.: Server
	PathName   string     // リソースのパス名 APIのURLで利用される e.g.: server 省略した場合はNameを小文字にしたものとなる
	PathSuffix string     // APIのURLで利用されるプレフィックス e.g.: api/cloud/1.1
	IsGlobal   bool       // 全ゾーンで共通リソース(グローバルリソース)
	Operations Operations // このリソースに対する操作
}

Resource APIで操作する対象のリソース

func (*Resource) FileSafeName

func (r *Resource) FileSafeName() string

FileSafeName スネークケースにしたResourceの名前、コード生成時の保存先ファイル名に利用される

func (*Resource) FileSafeServicePath added in v2.8.0

func (r *Resource) FileSafeServicePath() string

FileSafeServicePath Nameを全て小文字にしたもの、サービスコード生成時の保存先ディレクトリ名に利用される

func (*Resource) GetPathName

func (r *Resource) GetPathName() string

GetPathName リソースのパス名 APIのエンドポイントURLの算出で利用される 例: server

省略した場合はNameをスネークケース(小文字+アンダーバー)に変換したものが利用される

func (*Resource) GetPathSuffix

func (r *Resource) GetPathSuffix() string

GetPathSuffix PathSuffixの取得

func (*Resource) ImportStatements

func (r *Resource) ImportStatements(additionalImports ...string) []string

ImportStatements コード生成時に利用するimport文を生成する

func (*Resource) TypeName

func (r *Resource) TypeName() string

TypeName 型名を返す、コード生成時の型定義などで利用される

type Resources

type Resources []*Resource

Resources []*Resourceのエイリアス

func (*Resources) Define

func (r *Resources) Define(rs *Resource)

Define リソースの定義

func (Resources) ImportStatements

func (r Resources) ImportStatements(additionalImports ...string) []string

ImportStatements コード生成時に利用するimport文を生成する

func (Resources) ImportStatementsForModelDef

func (r Resources) ImportStatementsForModelDef(additionalImports ...string) []string

ImportStatementsForModelDef Resources配下に含まれる全てのモデルのフィールドを含めたimport文を生成する

func (Resources) Models

func (r Resources) Models() Models

Models モデル一覧を取得

type Result

type Result struct {
	SourceField string // エンベロープのフィールド名
	DestField   string // xxxResultでのフィールド名
	IsPlural    bool
	Model       *Model // パラメータの型情報
	Tags        *FieldTags
}

Result Operationでの戻り値定義

func (*Result) GoImportPath

func (r *Result) GoImportPath() string

GoImportPath インポートパス

func (*Result) GoPkg

func (r *Result) GoPkg() string

GoPkg パッケージ名

func (*Result) GoType

func (r *Result) GoType() string

GoType 型名

func (*Result) GoTypeSourceCode

func (r *Result) GoTypeSourceCode() string

GoTypeSourceCode ソースコードでの型表現

func (*Result) ImportStatements

func (r *Result) ImportStatements(additionalImports ...string) []string

ImportStatements コード生成時に利用するimport文を生成する

func (*Result) TagString

func (r *Result) TagString() string

TagString タグの文字列表現

func (*Result) ToPtrType added in v2.8.0

func (r *Result) ToPtrType() meta.Type

ToPtrType ポインタ型への変換

func (*Result) Type

func (r *Result) Type() meta.Type

Type モデルの型情報

func (*Result) ZeroInitializeSourceCode

func (r *Result) ZeroInitializeSourceCode() string

ZeroInitializeSourceCode 型に応じたzero値での初期化コード

func (*Result) ZeroValueSourceCode

func (r *Result) ZeroValueSourceCode() string

ZeroValueSourceCode 型に応じたzero値コード

type ResultType

type ResultType struct {
	// contains filtered or unexported fields
}

ResultType Operationからの戻り値の型情報

func (*ResultType) GoImportPath

func (r *ResultType) GoImportPath() string

GoImportPath インポートパス

func (*ResultType) GoPkg

func (r *ResultType) GoPkg() string

GoPkg パッケージ名

func (*ResultType) GoType

func (r *ResultType) GoType() string

GoType 型名

func (*ResultType) GoTypeSourceCode

func (r *ResultType) GoTypeSourceCode() string

GoTypeSourceCode ソースコードでの型表現

func (*ResultType) ToPtrType added in v2.8.0

func (r *ResultType) ToPtrType() meta.Type

ToPtrType ポインタ型への変換

func (*ResultType) Type

func (r *ResultType) Type() meta.Type

Type モデルの型情報

func (*ResultType) ZeroInitializeSourceCode

func (r *ResultType) ZeroInitializeSourceCode() string

ZeroInitializeSourceCode 型に応じたzero値での初期化コード

func (*ResultType) ZeroValueSourceCode

func (r *ResultType) ZeroValueSourceCode() string

ZeroValueSourceCode 型に応じたzero値コード

type ResultTypeInfo

type ResultTypeInfo struct {
	VarName   string    // 変数名
	FieldName string    // トレース時の見出し
	Type      meta.Type // 型
}

ResultTypeInfo 戻り値の型情報

主にtraceで利用される

type Results

type Results []*Result

Results Resultの配列

func (*Results) Models

func (r *Results) Models() Models

Models Resultsに登録されているModelを返す

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL