Skip to content

Instantly share code, notes, and snippets.

View vikingosegundo's full-sized avatar

Manuel Meyer vikingosegundo

  • Groningen, Netherlands
View GitHub Profile
output(.radio(.visualizer( .activation(.succeeded))))
output(.radio(.visualizer(.deactivation(.succeeded))))
request(player, to:.play(station))
request(player, to:.pause)
struct Player: UseCase {
enum Request {
case play(Station)
case pause
}
enum Response {
case playing(String, on:Station)
case paused (Station)
case waiting(Station)
}
protocol UseCase {
associatedtype RequestType
associatedtype ResponseType
func request(to request:RequestType)
}
func createRadioFeature(
store s: Store,
player p: AudioPlayer,
output o: @escaping Output) -> Input
{
let loader = StationLoader( store:s, responder:handle(output:o))
let player = Player(audioplayer:p, store:s, responder:handle(output:o))
let visActivater = VisualisationActivator( store:s, responder:handle(output:o))
let visualiser = Visualiser(audioplayer:p, store:s, responder:handle(output:o))
let filter = StationFilter( store:s, responder:handle(output:o))
typealias Input = (Message) -> ()
typealias Output = (Message) -> ()
func createRadioFeature(
store s: Store,
player p: AudioPlayer,
output o: @escaping Output
) -> Input
let s:_Stack<String> = createStack()
s.push("one")
s.push("two")
s.push("three")
let o = Stack(s)
o.push("four")
let t = Stack.Transcoder(stack: o)
let jsonData = try! JSONEncoder().encode(t)
extension Stack {
struct Transcoder: Codable {
enum CodingKeys: String, CodingKey { case elements }
let stack: Stack<T>
init(stack s:Stack<T>) { stack = s }
init(from decoder: Decoder) throws {
stack = Stack(createStack(with:try decoder.container(keyedBy:CodingKeys.self).decode(Array<T>.self,forKey:.elements)))
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
--- Stack<String>: 4 elements ---
"four"
"three"
"two"
"one"
+++++++++++++++++++++++++++++++++
let o = Stack(s)
o.push("four")
print(o)