mirror of
https://github.com/Theodor-Springmann-Stiftung/kgpz_web.git
synced 2025-10-29 00:55:32 +00:00
55 lines
908 B
Go
55 lines
908 B
Go
package providers
|
|
|
|
import (
|
|
"encoding/xml"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"sync"
|
|
)
|
|
|
|
type KGPZXML[T any] interface {
|
|
Append(data T) T
|
|
fmt.Stringer
|
|
}
|
|
|
|
type XMLProvider[T KGPZXML[T]] struct {
|
|
mu sync.Mutex
|
|
paths []string
|
|
Items T
|
|
}
|
|
|
|
func (p *XMLProvider[T]) Load() error {
|
|
for _, path := range p.paths {
|
|
var data T
|
|
if err := UnmarshalFile(path, &data); err != nil {
|
|
fmt.Println(err)
|
|
return err
|
|
}
|
|
p.mu.Lock()
|
|
p.Items = p.Items.Append(data)
|
|
p.mu.Unlock()
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (a *XMLProvider[T]) String() string {
|
|
a.mu.Lock()
|
|
defer a.mu.Unlock()
|
|
return fmt.Sprintf("Items: %s", a.Items)
|
|
}
|
|
|
|
func UnmarshalFile[T any](filename string, data *T) error {
|
|
xmlFile, err := os.Open(filename)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return err
|
|
}
|
|
fmt.Println("Successfully opened " + filename)
|
|
defer xmlFile.Close()
|
|
byteValue, _ := io.ReadAll(xmlFile)
|
|
xml.Unmarshal(byteValue, data)
|
|
|
|
return nil
|
|
}
|