package main /* import ( "pkg.jfrech.com/brief/internal/worlds" ) // Exactly one pointer is non-nil. See [MessageIdOrOtherworldlyFile.Contract]. type MessageIdOrOtherworldlyFile struct { MessageId *messageid.MessageId OtherworldlyFile *worlds.OtherworldlyFile } // may panic func (midOrOwf MessageIdOrOtherworldlyFile) Contract() { a, b := midOrOwf.MessageId, midOrOwf.OtherworldlyFile if a == nil && b == nil { panic("zero sum") } else if a != nil && b != nil { panic("overzealous sum") } } func (midOrOwf MessageIdOrOtherworldlyFile) IsMessageId() bool { midOrOwf.Contract() return midOrOwf.MessageId != nil } func (midOrOwf MessageIdOrOtherworldlyFile) MessageId() messageid.MessageId { if midOrOwf.Contract(); midOrOwf.MessageId == nil { panic("!IsMessageId") } return *midOrOwf.MessageId } func (midOrOwf MessageIdOrOtherworldlyFile) IsOtherworldlyFile() bool { midOrOwf.Contract() return midOrOwf.OtherworldlyFile != nil } func (midOrOwf MessageIdOrOtherworldlyFile) OtherworldlyFile() OtherworldlyFile { if midOrOwf.Contract(); midOrOwf.OtherworldlyFile == nil { panic("!IsOtherworldlyFile") } return *midOrOwf.OtherworldlyFile } */