github.com/profzone/eden-framework@v1.0.10/internal/generator/files/mod.go (about) 1 package files 2 3 import ( 4 "bytes" 5 "fmt" 6 ) 7 8 type ModRequired struct { 9 pkgName string 10 version string 11 } 12 13 func NewModRequired(pkg, ver string) ModRequired { 14 return ModRequired{ 15 pkgName: pkg, 16 version: ver, 17 } 18 } 19 20 func (r ModRequired) String() string { 21 return fmt.Sprintf("%s %s", r.pkgName, r.version) 22 } 23 24 type ModReplace struct { 25 fromPkgName string 26 fromPkgVersion string 27 toPkgName string 28 toPkgVersion string 29 } 30 31 func NewModReplace(fromPkg, fromVer, toPkg, toVer string) ModReplace { 32 return ModReplace{ 33 fromPkgName: fromPkg, 34 fromPkgVersion: fromVer, 35 toPkgName: toPkg, 36 toPkgVersion: toVer, 37 } 38 } 39 40 func (r ModReplace) String() string { 41 return fmt.Sprintf("%s %s => %s %s", r.fromPkgName, r.fromPkgVersion, r.toPkgName, r.toPkgVersion) 42 } 43 44 type ModFile struct { 45 moduleName string 46 version string 47 48 required []ModRequired 49 replaces []ModReplace 50 } 51 52 func NewModFile(name, version string) *ModFile { 53 return &ModFile{ 54 moduleName: name, 55 version: version, 56 required: make([]ModRequired, 0), 57 } 58 } 59 60 func (m *ModFile) AddRequired(pkg, ver string) *ModFile { 61 m.required = append(m.required, NewModRequired(pkg, ver)) 62 return m 63 } 64 65 func (m *ModFile) AddReplace(fromPkg, fromVer, toPkg, toVer string) *ModFile { 66 m.replaces = append(m.replaces, NewModReplace(fromPkg, fromVer, toPkg, toVer)) 67 return m 68 } 69 70 func (m *ModFile) requiredString() string { 71 buf := bytes.NewBuffer([]byte{}) 72 73 buf.WriteString("require (\n") 74 for _, r := range m.required { 75 buf.WriteString("\t" + r.String() + "\n") 76 } 77 buf.WriteString(")\n") 78 79 return buf.String() 80 } 81 82 func (m *ModFile) replacesString() string { 83 buf := bytes.NewBuffer([]byte{}) 84 85 buf.WriteString("replace (\n") 86 for _, r := range m.replaces { 87 buf.WriteString("\t" + r.String() + "\n") 88 } 89 buf.WriteString(")\n") 90 91 return buf.String() 92 } 93 94 func (m *ModFile) String() string { 95 return fmt.Sprintf(`module %s 96 97 go %s 98 99 %s 100 101 %s 102 `, m.moduleName, m.version, m.replacesString(), m.requiredString()) 103 }