func NewPropertyAttribute(key string) Attribute {
	return Attribute{
		Key: key,
	}
}
NewPropertyAttribute constructs a new attribute
package sdp
import (
	"fmt"
	"strconv"
	"strings"
)
type Information string
func (i *Information) String() *string {
	output := string(*i)
	return &output
}
type ConnectionInformation struct {
	NetworkType string
	AddressType string
	Address     *Address
}
func (c *ConnectionInformation) String() *string {
	output := fmt.Sprintf(
		"%v %v %v",
		c.NetworkType,
		c.AddressType,
		c.Address.String(),
	)
	return &output
}
type Address struct {
	Address string
	TTL     *int
	Range   *int
}
func (c *Address) String() string {
	var parts []string
	parts = append(parts, c.Address)
	if c.TTL != nil {
		parts = append(parts, strconv.Itoa(*c.TTL))
	}
	if c.Range != nil {
		parts = append(parts, strconv.Itoa(*c.Range))
	}
	return strings.Join(parts, "/")
}
type Bandwidth struct {
	Experimental bool
	Type         string
	Bandwidth    uint64
}
func (b *Bandwidth) String() *string {
	var output string
	if b.Experimental {
		output += "X-"
	}
	output += b.Type + ":" + strconv.FormatUint(b.Bandwidth, 10)
	return &output
}
type EncryptionKey string
func (s *EncryptionKey) String() *string {
	output := string(*s)
	return &output
}
type Attribute struct {
	Key   string
	Value string
}