import Foundation struct PageVideoTemplate: Template { typealias VideoSource = (url: String, type: VideoType) enum Key: String, CaseIterable { case options = "OPTIONS" case sources = "SOURCES" } enum VideoOption: String { case controls case autoplay case muted case loop case playsinline case poster case preload } static let templateName = "video.html" let raw: String func generate(sources: [VideoSource], options: T) -> String where T: Sequence, T.Element == VideoOption { let sourcesCode = sources.map(makeSource).joined(separator: "\n") let optionCode = options.map { $0.rawValue }.joined(separator: " ") return generate([.sources: sourcesCode, .options: optionCode]) } private func makeSource(_ source: VideoSource) -> String { """ """ } }