// http://www.nomnoml.com/
#direction: TD

[<package> model|
    [ «enumeration»
      + TextureFormat
    | 
      JPEG 
      PNG
    ]
    [+ Texture|...]
    [Sha256|...]
]

[<package> persistency |
	
    [+ DataStore|...]
    
    [<package> result|
      [+ TextureFileResult|...]
      [+ TextureFileError|...]

      [+ TextureFileResult|...] -/- [+ TextureFileError]
    ]
    
    [<package> search|
    	[+ Query|...]
    ]
    
    [<package> image_convert|
    	[+ ConvertConfig|...]
        |
        + generate_preview(input, format, config) : ...
    ]
    
    [search] -/- [image_convert]
]

[<package> protocol| 
	[<abstract> + ProtocolHandler|...]
    [+ ProtocolConfig|...] 
    
    [+ ProtocolHandler] -/- [+ ProtocolConfig] 
    [<package> autoconnect |
      + start_autoconnect_server(cfg : ProtocolConfig)
    ]
    
    [result] -/- [autoconnect]
    
    [<package> result|
      [+ ProtocolResult|...] 
      [+ ProtocolError|...] 
      [+ ReplaceTextureStatus|...]

      [+ ProtocolResult] -/- [+ ProtocolError] 
      [+ ProtocolError]  -/- [+ ReplaceTextureStatus]
    ]
    |
    + listen_forever(handler : &ProtocolHandler) : ...
]


[<package> main|
	[ServerState|...]
    [ServerState] -- [<note> implements 
      protocol::ProtocolHandler
    ]
    |
    + main() 
]

[main] --> [model]
[main] --> [protocol]
[main] --> [persistency]

[protocol] --> [model]
[persistency] --> [model]
