// // KMCompLightParser.swift // PDF Reader Pro // // Created by wanjun on 2022/12/21. // import Cocoa class KMCompLightParser: KMBaseParser { func startParse() -> KMCompLight { self.fileName = "comp-light" self.fileType = "json" return compLightParser(self.jsonParser) } func compLightParser(_ jsonData: [String: Any]) -> KMCompLight { let data = jsonData let allKey = data.keys let compLightModel = KMCompLight.init() if allKey.contains("btn") { compLightModel.btn = ["btn" : btnNodeParser((data["btn"] as! [String : Any]))] } if allKey.contains("dropdown") { compLightModel.dropdown = ["dropdown" : dropdownNodeParser((data["dropdown"] as! [String : Any]))] } if allKey.contains("navmenu") { compLightModel.navmenu = ["navmenu" : navmenuNodeParser((data["navmenu"] as! [String : Any]))] } if allKey.contains("multi-tab") { compLightModel.multi_tab = ["multi-tab" : multitabNodeParser((data["multi-tab"] as! [String : Any]))] } if allKey.contains("checkbox-radio") { compLightModel.checkbox_radio = ["checkbox-radio" : checkboxradioNodeParser((data["checkbox-radio"] as! [String : Any]))] } if allKey.contains("input") { compLightModel.input = ["input" : inputNodeParser((data["input"] as! [String : Any]))] } if allKey.contains("pagination") { compLightModel.pagination = ["pagination" : paginationNodeParser((data["pagination"] as! [String : Any]))] } if allKey.contains("select") { compLightModel.select = ["select" : selectNodeParser((data["select"] as! [String : Any]))] } if allKey.contains("slider") { compLightModel.slider = ["slider" : sliderNodeParser((data["slider"] as! [String : Any]))] } if allKey.contains("stepper") { compLightModel.stepper = ["stepper" : stepperNodeParser((data["stepper"] as! [String : Any]))] } if allKey.contains("badge") { compLightModel.badge = ["badge" : badgeNodeParser((data["badge"] as! [String : Any]))] } if allKey.contains("collapse") { compLightModel.collapse = ["collapse" : collapseNodeParser((data["collapse"] as! [String : Any]))] } if allKey.contains("list") { compLightModel.list = ["list" : listNodeParser((data["list"] as! [String : Any]))] } if allKey.contains("progress") { compLightModel.progress = ["progress" : progressNodeParser((data["progress"] as! [String : Any]))] } if allKey.contains("segmented") { compLightModel.segmented = ["segmented" : segmentedNodeParser((data["segmented"] as! [String : Any]))] } if allKey.contains("tree") { compLightModel.tree = ["tree" : treeNodeParser((data["tree"] as! [String : Any]))] } if allKey.contains("alert") { compLightModel.alert = ["alert" : alertNodeParser((data["alert"] as! [String : Any]))] } if allKey.contains("drawer") { compLightModel.drawer = ["drawer" : drawerNodeParser((data["drawer"] as! [String : Any]))] } if allKey.contains("notification") { compLightModel.notification = ["notification" : notificationNodeParser((data["notification"] as! [String : Any]))] } if allKey.contains("table") { compLightModel.table = ["table" : tableNodeParser((data["table"] as! [String : Any]))] } if allKey.contains("divider") { compLightModel.divider = ["divider" : dividerNodeParser((data["divider"] as! [String : Any]))] } return compLightModel } // MARK: Node Parser func btnNodeParser(_ jsonData: [String: Any]) -> KMCompLight_btn { let allKey = jsonData.keys let model = KMCompLight_btn.init() if allKey.contains("cta") { model.cta = ["cta" : sizeNodeParser(jsonData["cta"] as! [String : Any])] } if allKey.contains("brand") { model.brand = ["brand" : sizeNodeParser(jsonData["brand"] as! [String : Any])] } if allKey.contains("sec") { model.sec = ["sec" : sizeNodeParser(jsonData["sec"] as! [String : Any])] } if allKey.contains("ghost") { model.ghost = ["ghost" : sizeNodeParser(jsonData["ghost"] as! [String : Any])] } if allKey.contains("link") { model.link = ["link" : sizeNodeParser(jsonData["link"] as! [String : Any])] } if allKey.contains("upgrade") { model.upgrade = ["upgrade" : sizeNodeParser(jsonData["upgrade"] as! [String : Any])] } if allKey.contains("icon-fill") { model.icon_fill = ["icon-fill" : sizeNodeParser(jsonData["icon-fill"] as! [String : Any])] } if allKey.contains("sec-icon") { model.sec_icon = ["sec-icon" : sizeNodeParser(jsonData["sec-icon"] as! [String : Any])] } return model } func dropdownNodeParser(_ jsonData: [String: Any]) -> KMCompLight_dropdown { let allKey = jsonData.keys let model = KMCompLight_dropdown.init() if allKey.contains("s") { model.s = ["s" : uiAttributeParser(jsonData["s"] as! [String : Any])] } return model } func navmenuNodeParser(_ jsonData: [String: Any]) -> KMCompLight_navmenu { let allKey = jsonData.keys let model = KMCompLight_navmenu.init() if allKey.contains("mac-text") { model.mac_text = ["mac-text" : uiStateParser(jsonData["mac-text"] as! [String : Any])] } if allKey.contains("base") { model.base = ["base" : sizeNodeParser(jsonData["base"] as! [String : Any])] } if allKey.contains("has-icon") { model.has_icon = ["has-icon" : sizeNodeParser(jsonData["has-icon"] as! [String : Any])] } if allKey.contains("win-text") { model.win_text = ["win-text" : uiStateParser(jsonData["win-text"] as! [String : Any])] } return model } func multitabNodeParser(_ jsonData: [String: Any]) -> KMCompLight_multiTab { let allKey = jsonData.keys let model = KMCompLight_multiTab.init() if allKey.contains("bg") { model.bg = ["bg" : uiAttributeParser(jsonData["bg"] as! [String : Any])] } if allKey.contains("mac-text") { model.mac_text = ["mac-text" : uiStateParser(jsonData["mac-text"] as! [String : Any])] } if allKey.contains("win-text") { model.win_text = ["win-text" : uiStateParser(jsonData["win-text"] as! [String : Any])] } return model } func checkboxradioNodeParser(_ jsonData: [String: Any]) -> KMCompLight_checkboxRadio { let allKey = jsonData.keys let model = KMCompLight_checkboxRadio.init() if allKey.contains("bg") { model.bg = ["bg" : uiStateParser(jsonData["bg"] as! [String : Any])] } if allKey.contains("mac-text") { model.mac_text = ["mac-text" : uiStateParser(jsonData["mac-text"] as! [String : Any])] } if allKey.contains("win-text") { model.win_text = ["win-text" : uiStateParser(jsonData["win-text"] as! [String : Any])] } return model } func inputNodeParser(_ jsonData: [String: Any]) -> KMCompLight_input { let allKey = jsonData.keys let model = KMCompLight_input.init() if allKey.contains("m") { model.m = ["m" : uiAttributeParser(jsonData["m"] as! [String : Any])] } if allKey.contains("tips") { model.tips = ["tips" : uiAttributeParser(jsonData["tips"] as! [String : Any])] } if allKey.contains("s") { model.s = ["s" : uiAttributeParser(jsonData["s"] as! [String : Any])] } return model } func paginationNodeParser(_ jsonData: [String: Any]) -> KMCompLight_pagination { let allKey = jsonData.keys let model = KMCompLight_pagination.init() if allKey.contains("Simple") { model.simple = ["Simple" : uiAttributeParser2(jsonData["Simple"] as! [String : Any])] } if allKey.contains("multiple") { model.multiple = ["multiple" : uiAttributeParser2(jsonData["multiple"] as! [String : Any])] } return model } func selectNodeParser(_ jsonData: [String: Any]) -> KMCompLight_select { let allKey = jsonData.keys let model = KMCompLight_select.init() if allKey.contains("s") { model.s = ["s" : uiAttributeParser(jsonData["s"] as! [String : Any])] } if allKey.contains("m") { model.m = ["m" : uiAttributeParser(jsonData["m"] as! [String : Any])] } if allKey.contains("Simple") { model.simple = ["Simple" : uiAttributeParser2(jsonData["Simple"] as! [String : Any])] } return model } func sliderNodeParser(_ jsonData: [String: Any]) -> KMCompLight_slider { let allKey = jsonData.keys let model = KMCompLight_slider.init() if allKey.contains("knob") { model.knob = ["knob" : uiStateParser(jsonData["knob"] as! [String : Any])] } if allKey.contains("track") { model.track = ["track" : uiStateParser(jsonData["track"] as! [String : Any])] } if allKey.contains("track-filled") { model.track_filled = ["track-filled" : uiStateParser(jsonData["track-filled"] as! [String : Any])] } return model } func stepperNodeParser(_ jsonData: [String: Any]) -> KMCompLight_stepper { let allKey = jsonData.keys let model = KMCompLight_stepper.init() if allKey.contains("item-spacing") { model.item_spacing = ["item-spacing" : valueTypeParser(jsonData["item-spacing"] as! [String : Any])] } if allKey.contains("mac-text") { model.mac_text = ["mac-text" : uiStateParser(jsonData["mac-text"] as! [String : Any])] } if allKey.contains("bg") { model.bg = ["bg" : uiStateParser(jsonData["bg"] as! [String : Any])] } if allKey.contains("arrow") { model.arrow = ["arrow" : uiAttributeParser(jsonData["arrow"] as! [String : Any])] } if allKey.contains("win-text") { model.win_text = ["win-text" : uiStateParser(jsonData["win-text"] as! [String : Any])] } return model } func badgeNodeParser(_ jsonData: [String: Any]) -> KMCompLight_badge { let allKey = jsonData.keys let model = KMCompLight_badge.init() if allKey.contains("dot") { model.dot = ["dot" : valueTypeParser(jsonData["dot"] as! [String : Any])] } if allKey.contains("text") { model.text = ["text" : uiAttributeParser2(jsonData["text"] as! [String : Any])] } return model } func cardNodeParser(_ jsonData: [String: Any]) -> KMCompLight_card { let allKey = jsonData.keys let model = KMCompLight_card.init() if allKey.contains("has-desc") { model.has_desc = ["has-desc" : uiAttributeParser(jsonData["has-desc"] as! [String : Any])] } if allKey.contains("Simple") { model.simple = ["Simple" : uiAttributeParser(jsonData["Simple"] as! [String : Any])] } if allKey.contains("mac-text") { model.mac_text = ["mac-text" : uiStateParser(jsonData["mac-text"] as! [String : Any])] } if allKey.contains("item-spacing") { model.item_spacing = ["item-spacing" : valueTypeParser(jsonData["item-spacing"] as! [String : Any])] } if allKey.contains("win-text") { model.win_text = ["win-text" : uiStateParser(jsonData["win-text"] as! [String : Any])] } return model } func collapseNodeParser(_ jsonData: [String: Any]) -> KMCompLight_collapse { let allKey = jsonData.keys let model = KMCompLight_collapse.init() if allKey.contains("ad-list") { let subData = jsonData["ad-list"] as! [String : Any] let subKeys = subData.keys let submodel = KMCompLight_UIAttribute.init() if subKeys.contains("mac-text") { submodel.mac_text = ["mac-text" : uiStateParser(subData["mac-text"] as! [String : Any])] } if subKeys.contains("bg") { submodel.bg = ["bg" : valueTypeParser(subData["bg"] as! [String : Any])] } if subKeys.contains("win-text") { submodel.win_text = ["win-text" : uiStateParser(subData["win-text"] as! [String : Any])] } if subKeys.contains("item-spacing") { submodel.item_spacing = ["item-spacing" : valueTypeParser(subData["item-spacing"] as! [String : Any])] } model.ad_list = ["ad-list" : submodel] } if allKey.contains("bota-list") { let subData = jsonData["bota-list"] as! [String : Any] let subKeys = subData.keys let submodel = KMCompLight_UIAttribute.init() if subKeys.contains("bg") { submodel.bg = ["bg" : valueTypeParser(subData["bg"] as! [String : Any])] } if subKeys.contains("mac-text-title") { submodel.mac_text_title = ["mac-text-title" : uiStateParser(subData["mac-text-title"] as! [String : Any])] } if subKeys.contains("mac-text-desc") { submodel.mac_text_desc = ["mac-text-desc" : uiStateParser(subData["mac-text-desc"] as! [String : Any])] } if subKeys.contains("win-text-title") { submodel.win_text_title = ["win-text-title" : uiStateParser(subData["win-text-title"] as! [String : Any])] } if subKeys.contains("win-text-desc") { submodel.win_text_desc = ["win-text-desc" : uiStateParser(subData["win-text-desc"] as! [String : Any])] } model.bota_list = ["bota-list" : submodel] } return model } func listNodeParser(_ jsonData: [String: Any]) -> KMCompLight_list { let allKey = jsonData.keys let model = KMCompLight_list.init() if allKey.contains("bookmark") { let subData = jsonData["bookmark"] as! [String : Any] let subKeys = subData.keys let submodel = KMCompLight_UIAttribute.init() if subKeys.contains("mac-text") { submodel.mac_text = ["mac-text" : valueTypeParser(subData["mac-text"] as! [String : Any])] } if subKeys.contains("win-text") { submodel.win_text = ["win-text" : valueTypeParser(subData["win-text"] as! [String : Any])] } if subKeys.contains("bg") { submodel.bg = ["bg" : uiStateParser(subData["bg"] as! [String : Any])] } model.bookmark = ["bookmark" : submodel] } if allKey.contains("markup-header") { model.markup_header = ["markup-header" : uiAttributeParser2(jsonData["markup-header"] as! [String : Any])] } if allKey.contains("markup-note") { model.markup_note = ["markup-note" : uiAttributeParser2(jsonData["markup-note"] as! [String : Any])] } return model } func progressNodeParser(_ jsonData: [String: Any]) -> KMCompLight_progress { let allKey = jsonData.keys let model = KMCompLight_progress.init() if allKey.contains("popup") { let subData = jsonData["popup"] as! [String : Any] let subKeys = subData.keys let submodel = KMCompLight_UIAttribute.init() if subKeys.contains("bg") { submodel.bg = ["bg" : valueTypeParser(subData["bg"] as! [String : Any])] } if subKeys.contains("mac-text") { submodel.mac_text = ["mac-text" : valueTypeParser(subData["mac-text"] as! [String : Any])] } if subKeys.contains("win-text") { submodel.win_text = ["win-text" : valueTypeParser(subData["win-text"] as! [String : Any])] } if subKeys.contains("progress-bar") { submodel.progress_bar = ["progress-bar" : progressBarParser(subData["progress-bar"] as! [String : Any])] } if subKeys.contains("item-spacing") { submodel.item_spacing = ["item-spacing" : valueTypeParser(subData["item-spacing"] as! [String : Any])] } model.popup = ["popup" : submodel] } if allKey.contains("loading") { let subData = jsonData["loading"] as! [String : Any] let subKeys = subData.keys let submodel = KMCompLight_sizeNode.init() if subKeys.contains("m") { submodel.m = ["m" : valueTypeParser(subData["m"] as! [String : Any])] } if subKeys.contains("s") { submodel.s = ["s" : valueTypeParser(subData["s"] as! [String : Any])] } model.loading = ["loading" : submodel] } return model } func segmentedNodeParser(_ jsonData: [String: Any]) -> KMCompLight_segmented { let allKey = jsonData.keys let model = KMCompLight_segmented.init() if allKey.contains("bg") { model.bg = ["bg" : valueTypeParser(jsonData["bg"] as! [String : Any])] } if allKey.contains("bg-item") { model.bg_item = ["bg-item" : uiStateParser(jsonData["bg-item"] as! [String : Any])] } if allKey.contains("mac-text") { model.mac_text = ["mac-text" : uiStateParser(jsonData["mac-text"] as! [String : Any])] } if allKey.contains("win-text") { model.win_text = ["win-text" : uiStateParser(jsonData["win-text"] as! [String : Any])] } return model } func treeNodeParser(_ jsonData: [String: Any]) -> KMCompLight_tree { let allKey = jsonData.keys let model = KMCompLight_tree.init() if allKey.contains("base") { model.base = ["base" : baseNodeParser(jsonData["base"] as! [String : Any])] } if allKey.contains("mac-text") { model.mac_text = ["mac-text" : uiStateParser(jsonData["mac-text"] as! [String : Any])] } if allKey.contains("rename") { let subData = jsonData["rename"] as! [String : Any] let subKeys = subData.keys let submodel = KMCompLight_UIAttribute.init() if subKeys.contains("bg-text") { submodel.bg_text = ["bg-text" : uiStateParser(subData["bg-text"] as! [String : Any])] } if subKeys.contains("bg-field") { submodel.bg_field = ["bg-field" : valueTypeParser(subData["bg-field"] as! [String : Any])] } model.rename = ["rename" : submodel] } if allKey.contains("has-arrow") { model.has_arrow = ["has-arrow" : baseNodeParser(jsonData["has-arrow"] as! [String : Any])] } if allKey.contains("win-text") { model.win_text = ["win-text" : uiStateParser(jsonData["win-text"] as! [String : Any])] } return model } func alertNodeParser(_ jsonData: [String: Any]) -> KMCompLight_alert { let allKey = jsonData.keys let model = KMCompLight_alert.init() if allKey.contains("mac-text") { model.mac_text = ["mac-text" : valueTypeParser(jsonData["mac-text"] as! [String : Any])] } if allKey.contains("win-text") { model.win_text = ["win-text" : valueTypeParser(jsonData["win-text"] as! [String : Any])] } if allKey.contains("bg") { model.bg = ["bg" : uiStateParser(jsonData["bg"] as! [String : Any])] } if allKey.contains("item-spacing") { model.item_spacing = ["item-spacing" : valueTypeParser(jsonData["item-spacing"] as! [String : Any])] } return model } func drawerNodeParser(_ jsonData: [String: Any]) -> KMCompLight_drawer { let allKey = jsonData.keys let model = KMCompLight_drawer.init() if allKey.contains("mac-text") { model.mac_text = ["mac-text" : valueTypeParser(jsonData["mac-text"] as! [String : Any])] } if allKey.contains("win-text") { model.win_text = ["win-text" : valueTypeParser(jsonData["win-text"] as! [String : Any])] } if allKey.contains("bg") { model.bg = ["bg" : valueTypeParser(jsonData["bg"] as! [String : Any])] } if allKey.contains("item-spacing") { model.item_spacing = ["item-spacing" : valueTypeParser(jsonData["item-spacing"] as! [String : Any])] } return model } func notificationNodeParser(_ jsonData: [String: Any]) -> KMCompLight_notification { let allKey = jsonData.keys let model = KMCompLight_notification.init() if allKey.contains("toast") { model.toast = ["toast" : uiAttributeParser2(jsonData["toast"] as! [String : Any])] } if allKey.contains("modal") { let subData = jsonData["modal"] as! [String : Any] let subKeys = subData.keys let submodel = KMCompLight_UIAttribute.init() if subKeys.contains("bg") { submodel.bg = ["bg" : valueTypeParser(subData["bg"] as! [String : Any])] } if subKeys.contains("item-spacing") { submodel.item_spacing = ["item-spacing" : valueTypeParser(subData["item-spacing"] as! [String : Any])] } if subKeys.contains("mac-text") { submodel.mac_text = ["mac-text" : uiStateParser(subData["mac-text"] as! [String : Any])] } if subKeys.contains("win-text") { submodel.win_text = ["win-text" : uiStateParser(subData["win-text"] as! [String : Any])] } model.modal = ["modal" : submodel] } return model } func tableNodeParser(_ jsonData: [String: Any]) -> KMCompLight_table { let allKey = jsonData.keys let model = KMCompLight_table.init() if allKey.contains("header") { model.header = ["header" : uiAttributeParser2(jsonData["header"] as! [String : Any])] } if allKey.contains("mac-text") { model.mac_text = ["mac-text" : uiStateParser(jsonData["mac-text"] as! [String : Any])] } if allKey.contains("list") { model.list = ["list" : tableListNodeParser(jsonData["list"] as! [String : Any])] } if allKey.contains("win-text") { model.win_text = ["win-text" : uiStateParser(jsonData["win-text"] as! [String : Any])] } return model } func dividerNodeParser(_ jsonData: [String: Any]) -> KMCompLight_divider { let allKey = jsonData.keys let model = KMCompLight_divider.init() if allKey.contains("horiz") { model.horiz = ["horiz" : valueTypeParser(jsonData["horiz"] as! [String : Any])] } if allKey.contains("vert") { model.vert = ["vert" : valueTypeParser(jsonData["vert"] as! [String : Any])] } return model } // MARK: func sizeNodeParser(_ jsonData: [String: Any]) -> KMCompLight_sizeNode { let allKey = jsonData.keys let model = KMCompLight_sizeNode.init() if allKey.contains("s") { model.s = ["s" : uiAttributeParser(jsonData["s"] as! [String : Any])] } if allKey.contains("m") { model.m = ["m" : uiAttributeParser(jsonData["m"] as! [String : Any])] } if allKey.contains("l") { model.l = ["l" : uiAttributeParser(jsonData["l"] as! [String : Any])] } return model } func tableListNodeParser(_ jsonData: [String: Any]) -> KMCompLight_tableListNode { let allKey = jsonData.keys let model = KMCompLight_tableListNode.init() if allKey.contains("file") { model.file = ["file" : uiAttributeParser3(jsonData["file"] as! [String : Any])] } if allKey.contains("batch") { model.batch = ["batch" : uiAttributeParser(jsonData["batch"] as! [String : Any])] } return model } func uiAttributeParser(_ jsonData: [String: Any]) -> KMCompLight_UIAttribute { //btn - cta - mac-text/ let allKey = jsonData.keys let model = KMCompLight_UIAttribute.init() if allKey.contains("mac-text") { model.mac_text = ["mac-text" : uiStateParser(jsonData["mac-text"] as! [String : Any])] } if allKey.contains("bg") { model.bg = ["bg" : uiStateParser(jsonData["bg"] as! [String : Any])] } if allKey.contains("win-text") { model.win_text = ["win-text" : uiStateParser(jsonData["win-text"] as! [String : Any])] } if allKey.contains("item-spacing") { model.item_spacing = ["item-spacing" : valueTypeParser(jsonData["item-spacing"] as! [String : Any])] } return model } func uiAttributeParser2(_ jsonData: [String: Any]) -> KMCompLight_UIAttribute { let allKey = jsonData.keys let model = KMCompLight_UIAttribute.init() if allKey.contains("mac-text") { model.mac_text = ["mac-text" : valueTypeParser(jsonData["mac-text"] as! [String : Any])] } if allKey.contains("bg") { model.bg = ["bg" : valueTypeParser(jsonData["bg"] as! [String : Any])] } if allKey.contains("win-text") { model.win_text = ["win-text" : valueTypeParser(jsonData["win-text"] as! [String : Any])] } if allKey.contains("item-spacing") { model.item_spacing = ["item-spacing" : valueTypeParser(jsonData["item-spacing"] as! [String : Any])] } return model } func uiAttributeParser3(_ jsonData: [String: Any]) -> KMCompLight_UIAttribute { //btn - cta - mac-text/ let allKey = jsonData.keys let model = KMCompLight_UIAttribute.init() if allKey.contains("mac-text") { model.mac_text = ["mac-text" : uiStateParser(jsonData["mac-text"] as! [String : Any])] } if allKey.contains("bg") { model.bg = ["bg" : uiStateParser(jsonData["bg"] as! [String : Any])] } if allKey.contains("win-text") { model.win_text = ["win-text" : uiStateParser(jsonData["win-text"] as! [String : Any])] } if allKey.contains("item-spacing") { model.item_spacing = ["item-spacing" : uiStateParser(jsonData["item-spacing"] as! [String : Any])] } return model } func uiStateParser(_ jsonData: [String: Any]) -> KMCompLight_UIState { let allKey = jsonData.keys let model = KMCompLight_UIState.init() if allKey.contains("def") { model.def = ["def" : valueTypeParser(jsonData["def"] as! [String : Any])] } if allKey.contains("dis") { model.dis = ["dis" : valueTypeParser(jsonData["dis"] as! [String : Any])] } if allKey.contains("norm") { model.norm = ["norm" : valueTypeParser(jsonData["norm"] as! [String : Any])] } if allKey.contains("hov") { model.hov = ["hov" : valueTypeParser(jsonData["hov"] as! [String : Any])] } if allKey.contains("act") { model.act = ["act" : valueTypeParser(jsonData["act"] as! [String : Any])] } if allKey.contains("sel") { model.sel = ["sel" : valueTypeParser(jsonData["sel"] as! [String : Any])] } if allKey.contains("placeholder") { model.placeholder = ["placeholder" : valueTypeParser(jsonData["placeholder"] as! [String : Any])] } if allKey.contains("focus") { model.focus = ["focus" : valueTypeParser(jsonData["focus"] as! [String : Any])] } if allKey.contains("error-def") { model.error_def = ["error-def" : valueTypeParser(jsonData["error-def"] as! [String : Any])] } if allKey.contains("error-focus") { model.error_focus = ["error-focus" : valueTypeParser(jsonData["error-focus"] as! [String : Any])] } if allKey.contains("error") { model.error = ["error" : valueTypeParser(jsonData["error"] as! [String : Any])] } if allKey.contains("none") { model.none = ["none" : valueTypeParser(jsonData["none"] as! [String : Any])] } if allKey.contains("custom") { model.custom = ["custom" : valueTypeParser(jsonData["custom"] as! [String : Any])] } if allKey.contains("move") { model.move = ["move" : valueTypeParser(jsonData["move"] as! [String : Any])] } if allKey.contains("change") { model.change = ["change" : valueTypeParser(jsonData["change"] as! [String : Any])] } if allKey.contains("title") { model.title = ["title" : valueTypeParser(jsonData["title"] as! [String : Any])] } if allKey.contains("desc") { model.desc = ["desc" : valueTypeParser(jsonData["desc"] as! [String : Any])] } if allKey.contains("unsel") { model.unsel = ["unsel" : valueTypeParser(jsonData["unsel"] as! [String : Any])] } if allKey.contains("main") { model.main = ["main" : valueTypeParser(jsonData["main"] as! [String : Any])] } if allKey.contains("info") { model.info = ["info" : valueTypeParser(jsonData["info"] as! [String : Any])] } if allKey.contains("warning") { model.warning = ["warning" : valueTypeParser(jsonData["warning"] as! [String : Any])] } if allKey.contains("item") { model.item = ["item" : valueTypeParser(jsonData["item"] as! [String : Any])] } return model } func valueTypeParser(_ jsonData: [String: Any]) -> KMCompLight_valueType { let allKey = jsonData.keys let model = KMCompLight_valueType.init() if allKey.contains("value") { model.value = ["value" : uiValueParser(jsonData["value"] as! [String : Any])] } if allKey.contains("type") { model.type = ["type" : jsonData["type"] as! String] } return model } func uiValueParser(_ jsonData: [String: Any]) -> KMCompLight_UIValue { let allKey = jsonData.keys let model = KMCompLight_UIValue.init() if allKey.contains("fill") { model.fill = ["fill" : jsonData["fill"] as! String] } if allKey.contains("typography") { model.typography = ["typography" : jsonData["typography"] as! String] } if allKey.contains("height") { model.height = ["height" : jsonData["height"] as! String] } if allKey.contains("horizontalPadding") { model.horizontalPadding = ["horizontalPadding" : jsonData["horizontalPadding"] as! String] } if allKey.contains("borderRadius") { model.borderRadius = ["borderRadius" : jsonData["borderRadius"] as! String] } if allKey.contains("itemSpacing") { model.itemSpacing = ["itemSpacing" : jsonData["itemSpacing"] as! String] } if allKey.contains("borderWidth") { model.borderWidth = ["borderWidth" : jsonData["borderWidth"] as! String] } if allKey.contains("border") { model.border = ["border" : jsonData["border"] as! String] } if allKey.contains("borderRadiusTopLeft") { model.borderRadiusTopLeft = ["borderRadiusTopLeft" : jsonData["borderRadiusTopLeft"] as! String] } if allKey.contains("borderRadiusTopRight") { model.borderRadiusTopRight = ["borderRadiusTopRight" : jsonData["borderRadiusTopRight"] as! String] } if allKey.contains("borderWidthBottom") { model.borderWidthBottom = ["borderWidthBottom" : jsonData["borderWidthBottom"] as! String] } if allKey.contains("boxShadow") { model.boxShadow = ["boxShadow" : jsonData["boxShadow"] as! String] } if allKey.contains("paddingLeft") { model.paddingLeft = ["paddingLeft" : jsonData["paddingLeft"] as! String] } if allKey.contains("paddingRight") { model.paddingRight = ["paddingRight" : jsonData["paddingRight"] as! String] } if allKey.contains("paddingTop") { model.paddingTop = ["paddingTop" : jsonData["paddingTop"] as! String] } if allKey.contains("paddingBottom") { model.paddingBottom = ["paddingBottom" : jsonData["paddingBottom"] as! String] } return model } func progressBarParser(_ jsonData: [String: Any]) -> KMCompLight_progressBar { let allKey = jsonData.keys let model = KMCompLight_progressBar.init() if allKey.contains("track") { model.track = ["track" : valueTypeParser(jsonData["track"] as! [String : Any])] } if allKey.contains("track-filled") { model.track_filled = ["track-filled" : valueTypeParser(jsonData["track-filled"] as! [String : Any])] } return model } func baseNodeParser(_ jsonData: [String: Any]) -> KMCompLight_baseNode { let allKey = jsonData.keys let model = KMCompLight_baseNode.init() if allKey.contains("parent") { model.parent = ["parent" : uiAttributeParser(jsonData["parent"] as! [String : Any])] } if allKey.contains("children-lv2") { model.children_lv2 = ["children-lv2" : uiAttributeParser(jsonData["children-lv2"] as! [String : Any])] } if allKey.contains("children-lv3") { model.children_lv3 = ["children-lv3" : uiAttributeParser(jsonData["children-lv3"] as! [String : Any])] } if allKey.contains("children-lv4") { model.children_lv4 = ["children-lv4" : uiAttributeParser(jsonData["children-lv4"] as! [String : Any])] } return model } } // MARK: - Parser Action extension KMCompLightParser { func startJSONParse() -> [String : Any] { self.fileName = "comp-light" self.fileType = "json" return self.jsonParser } func parserValueNode(_ dict: [String : Any], _ tokenKey: String) -> Void { let valueDict = dict var tokenStr = tokenKey let allKey = valueDict.keys if allKey.contains("value") { let value = valueDict["value"] if (value is [String : String]) { var rootNode = value as! [String : Any] let rootNodeKeys = rootNode.keys for rootNodeKey in rootNodeKeys { let rootValue: String = rootNode[rootNodeKey] as! String if (rootValue.first == "{") && (rootValue.last == "}") { rootNode.updateValue(valueParser(key: rootValue), forKey: rootNodeKey) } } finalDict[tokenStr] = rootNode } } else { for node in allKey { if tokenKey == "" { tokenStr = node } else { tokenStr = String(format: "%@.%@", tokenKey, node) } parserValueNode(valueDict[node] as! [String : Any], tokenStr) } } } }