feat(ReverseEngine):初始化工程
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
package support
|
||||
|
||||
import (
|
||||
"ReverseEngine/entity"
|
||||
"ReverseEngine/static"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type FileContentSupport struct{}
|
||||
|
||||
func (FileContentSupport) GenerateFileContent(filePath string, fileName string, fms []entity.FieldMessage, hasTime bool, tagKey string) string {
|
||||
var build strings.Builder
|
||||
pName := splitLast(filePath, static.Splice)
|
||||
|
||||
writePackage(&build, pName) //写文件的引用包
|
||||
writeImportIfTime(&build, hasTime) //如果有time.Time类型的需要写入import
|
||||
buildStructHead(&build, fileName) //写入结构体头
|
||||
|
||||
//对于没有字段的返回空定义的文件
|
||||
if len(fms) == 0 {
|
||||
build.WriteString(static.RightBrace)
|
||||
return build.String()
|
||||
}
|
||||
|
||||
//写中间字段的操作
|
||||
for _, fm := range fms {
|
||||
build.WriteString(" ")
|
||||
build.WriteString(fm.FiledName)
|
||||
build.WriteString(" ")
|
||||
build.WriteString(fm.FieldType)
|
||||
build.WriteString(" ")
|
||||
build.WriteString(generateTag(fm, tagKey))
|
||||
build.WriteString(" ")
|
||||
build.WriteString(static.DoubleInclinedRod)
|
||||
build.WriteString(fm.Comment)
|
||||
build.WriteString(static.LineFeed)
|
||||
}
|
||||
|
||||
build.WriteString(static.RightBrace)
|
||||
|
||||
return build.String()
|
||||
}
|
||||
|
||||
func generateTag(message entity.FieldMessage, tagKey string) string {
|
||||
var build strings.Builder
|
||||
build.WriteString("`")
|
||||
build.WriteString(tagKey)
|
||||
build.WriteString(static.Colon)
|
||||
generateTagValue(message, &build)
|
||||
build.WriteString("`")
|
||||
return build.String()
|
||||
}
|
||||
|
||||
func generateTagValue(message entity.FieldMessage, builder *strings.Builder) {
|
||||
builder.WriteString("\"")
|
||||
if message.IsKey {
|
||||
builder.WriteString("pk ")
|
||||
}
|
||||
if !message.CanNull {
|
||||
builder.WriteString("not null ")
|
||||
}
|
||||
|
||||
builder.WriteString(message.OriginType)
|
||||
builder.WriteString("\"")
|
||||
}
|
||||
|
||||
func buildStructHead(build *strings.Builder, fileName string) {
|
||||
build.WriteString("type ")
|
||||
build.WriteString(fileName)
|
||||
build.WriteString(" struct")
|
||||
build.WriteString(static.LeftBrace)
|
||||
build.WriteString(static.LineFeed)
|
||||
}
|
||||
|
||||
func writeImportIfTime(build *strings.Builder, hasTime bool) {
|
||||
//如果有类型匹配上时间,那么需要在头部加上import
|
||||
if hasTime {
|
||||
build.WriteString("import (")
|
||||
build.WriteString("\n ")
|
||||
build.WriteString("\"time\"")
|
||||
build.WriteString("\n")
|
||||
build.WriteString(")")
|
||||
build.WriteString(static.LineFeed)
|
||||
build.WriteString(static.LineFeed)
|
||||
}
|
||||
}
|
||||
|
||||
func writePackage(build *strings.Builder, pName string) {
|
||||
build.WriteString("package ")
|
||||
build.WriteString(pName)
|
||||
build.WriteString(static.LineFeed)
|
||||
build.WriteString(static.LineFeed)
|
||||
}
|
||||
|
||||
/*
|
||||
返回按照规则切割的最后一个字符串
|
||||
*/
|
||||
func splitLast(filePath string, split string) string {
|
||||
ss := strings.Split(filePath, split)
|
||||
return ss[len(ss)-1]
|
||||
}
|
||||
Reference in New Issue
Block a user