mirror of
				https://github.com/Theodor-Springmann-Stiftung/lenz-web.git
				synced 2025-10-31 02:05:32 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			58 lines
		
	
	
		
			919 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			919 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package xmlparsing
 | |
| 
 | |
| import (
 | |
| 	"encoding/xml"
 | |
| 	"strings"
 | |
| )
 | |
| 
 | |
| type OptionalBool int
 | |
| 
 | |
| const (
 | |
| 	Unspecified OptionalBool = iota
 | |
| 	True
 | |
| 	False
 | |
| )
 | |
| 
 | |
| func (b OptionalBool) IsTrue() bool {
 | |
| 	return b == True
 | |
| }
 | |
| 
 | |
| func (b OptionalBool) IsFalse() bool {
 | |
| 	return b == False || b == Unspecified
 | |
| }
 | |
| 
 | |
| func (b *OptionalBool) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
 | |
| 	var attr struct {
 | |
| 		Value string `xml:"value,attr"`
 | |
| 	}
 | |
| 	if err := d.DecodeElement(&attr, &start); err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	switch strings.ToLower(attr.Value) {
 | |
| 	case "true":
 | |
| 		*b = True
 | |
| 	case "false":
 | |
| 		*b = False
 | |
| 	default:
 | |
| 		*b = Unspecified
 | |
| 	}
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func (b OptionalBool) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
 | |
| 	if b == Unspecified {
 | |
| 		return nil
 | |
| 	}
 | |
| 
 | |
| 	value := "false"
 | |
| 	if b == True {
 | |
| 		value = "true"
 | |
| 	}
 | |
| 
 | |
| 	type alias struct {
 | |
| 		Value string `xml:"value,attr"`
 | |
| 	}
 | |
| 	return e.EncodeElement(alias{Value: value}, start)
 | |
| }
 | 
