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  }