import 'package:flutter/material.dart'; import 'package:oc_front/core/services/enum_service.dart'; import 'package:oc_front/models/abstract.dart'; import 'package:oc_front/models/resources/resources.dart'; class ProcessingItem extends AbstractItem { // special attributes int? infrastructureEnum; bool isService = false; bool openSource = false; String? license; String? maturity; ProcessingUsage? usage; ProcessingItem({ this.infrastructureEnum, this.isService = false, this.openSource = false, this.license, this.maturity, this.usage, }): super(); @override String get topic => "processing"; @override deserialize(dynamic data) { try { data = data as Map; } catch (e) { return ProcessingItem(); } var w = ProcessingItem( infrastructureEnum: data.containsKey("infrastructure") ? EnumService.get("infrastructure", data["infrastructure"]) : null, isService: data.containsKey("is_service") && data["is_service"] != null ? data["is_service"] : false, openSource: data.containsKey("open_source") && data["open_source"] != null ? data["open_source"] : false, license: data.containsKey("license") && data["license"] != null ? data["license"] : null, maturity: data.containsKey("maturity") && data["maturity"] != null ? data["maturity"] : null, usage: data.containsKey("usage") && data["usage"] != null ? ProcessingUsage().deserialize(data["usage"]) : null, ); w.mapFromJSON(data, ProcessingInstance()); if (w.logo != null) { // get image dimensions var image = Image.network(w.logo!); image.image .resolve(const ImageConfiguration()) .addListener( ImageStreamListener( (ImageInfo info, bool _) { w.width = info.image.width.toDouble(); w.height = info.image.height.toDouble(); })); } return w; } @override Map infos() { return { "infrastructure": EnumService.enums["infrastructure"] != null && EnumService.enums["infrastructure"]!["$infrastructureEnum"] != null ? EnumService.enums["infrastructure"]!["$infrastructureEnum"] : infrastructureEnum, "is_service": isService, "open_source": openSource, "license": license, "maturity": maturity, }; } @override Map serialize() { var obj = infos(); obj["infrastructure"] = infrastructureEnum; obj["usage"] = usage?.serialize(); obj.addAll(toJSON()); return obj; } } class ProcessingAccess extends SerializerDeserializer { Containered? container; ProcessingAccess({ this.container, }); @override ProcessingAccess deserialize(dynamic json) { try { json = json as Map; } catch (e) { return ProcessingAccess(); } return ProcessingAccess( container: json.containsKey("container") && json["container"] != null ? Containered().deserialize(json["container"]) : null, ); } @override Map serialize() { return { "container": container?.serialize(), }; } } class ProcessingInstance extends AbstractInstance { ProcessingAccess? access; ProcessingInstance( {this.access} ): super(); @override ProcessingInstance deserialize(json) { try { json = json as Map; } catch (e) { return ProcessingInstance(); } var w = ProcessingInstance(); w.access = json.containsKey("access") && json["access"] != null ? ProcessingAccess().deserialize(json['access']) : null; w.mapFromJSON(json, ProcessingPartnership()); return w; } @override Map serialize() { var obj = toJSON(); obj["access"] = access?.serialize(); return obj; } @override Map infos() { return { "inputs": toListJson(inputs), "outputs": toListJson(outputs), }; } } class ProcessingPartnership extends AbstractPartnerShip { ProcessingPartnership(): super(); @override ProcessingPartnership deserialize(json) { try { json = json as Map; } catch (e) { return ProcessingPartnership(); } var w = ProcessingPartnership(); w.mapFromJSON(json, ProcessingPricing()); return w; } @override Map serialize() { return toJSON(); } } class ProcessingPricing extends AbstractPricing { @override ProcessingPricing deserialize(json) { var w = ProcessingPricing(); w.mapFromJSON(json); return w; } @override Map serialize() { return toJSON(); } } class ProcessingUsage extends SerializerDeserializer { Map cpus = {}; Map gpus = {}; RAM? ram; double? storageSize; String? hypothesis; String? scalingModel; ProcessingUsage({ this.cpus = const {}, this.gpus = const {}, this.ram, this.storageSize, this.hypothesis, this.scalingModel, }); @override ProcessingUsage deserialize(json) { return ProcessingUsage( cpus: json.containsKey("cpus") && json["cpus"] != null ? fromMapJson(json["cpus"], CPU()) : {}, gpus: json.containsKey("gpus") && json["gpus"] != null ? fromMapJson(json["gpus"], GPU()) : {}, ram: json.containsKey("ram") && json["ram"] != null ? RAM().deserialize(json["ram"]) : null, storageSize: json.containsKey("storage_size") && json["storage_size"] != null ? json["storage_size"]?.toDouble() : null, hypothesis: json.containsKey("hypothesis") && json["hypothesis"] != null ? json["hypothesis"] : null, scalingModel: json.containsKey("scaling_model") && json["scaling_model"] != null ? json["scaling_model"] : null, ); } @override Map serialize() { return { "cpus": toMapJson(cpus), "gpus": toMapJson(gpus), "ram": ram?.serialize(), "storage_size": storageSize, "hypothesis": hypothesis, "scaling_model": scalingModel, }; } } class CPU extends SerializerDeserializer { CPU({ this.cores, this.platform, this.architecture, this.minimumMemory, this.shared = false, }); double? cores; String? platform; bool shared = false; String? architecture; double? minimumMemory; @override deserialize(dynamic json) { try { json = json as Map; } catch (e) { return CPU(); } return CPU( cores: json.containsKey("cores") && json["cores"] != null ? json["cores"]?.toDouble() : null, platform: json.containsKey("platform") && json["platform"] != null ? json["platform"] : null, architecture: json.containsKey("architecture") && json["architecture"] != null ? json["architecture"] : null, minimumMemory: json.containsKey("minimumMemory") && json["minimumMemory"] != null ? json["minimumMemory"]?.toDouble() : null, shared: json.containsKey("shared") && json["shared"] != null ? json["shared"] : false, ); } @override Map serialize() => { "cores": cores, "platform": platform, "architecture": architecture, "minimumMemory": minimumMemory, "shared": shared, }; } class GPU extends SerializerDeserializer { GPU({ this.cudaCores, this.memory, this.model, this.tensorCores, }); double? cudaCores; double? memory; String? model; double? tensorCores; @override deserialize(dynamic json) { try { json = json as Map; } catch (e) { return GPU(); } return GPU( cudaCores: json.containsKey("cuda_cores") && json["cuda_cores"] != null ? json["cuda_cores"]?.toDouble() : null, memory: json.containsKey("memory") && json["memory"] != null ? json["memory"]?.toDouble() : null, model: json.containsKey("model") && json["model"] != null ? json["model"] : null, tensorCores: json.containsKey("tensor_cores") && json["tensor_cores"] != null ? json["tensor_cores"]?.toDouble() : null, ); } @override Map serialize() => { "cuda_cores": cudaCores, "memory": memory, "model": model, "tensor_cores": tensorCores, }; } class RAM extends SerializerDeserializer { RAM({ this.ecc = false, this.size, }); bool ecc = false; double? size; @override deserialize(dynamic json) { try { json = json as Map; } catch (e) { return RAM(); } return RAM( ecc: json.containsKey("ecc") && json["ecc"] != null ? json["ecc"] : false, size: json.containsKey("size") && json["size"] != null ? json["size"]?.toDouble() : null, ); } @override Map serialize() => { "ecc": ecc, "size": size, }; } class Expose extends SerializerDeserializer { Expose({ this.PAT, this.port, this.path, }); int? port; int? PAT; String? path; @override deserialize(dynamic json) { try { json = json as Map; } catch (e) { return Expose(); } return Expose( port: json.containsKey("port") && json["port"] != null ? json["port"] : null, PAT: json.containsKey("PAT") && json["PAT"] != null ? json["PAT"] : null, path: json.containsKey("reverse") && json["reverse"] != null ? json["reverse"] : null, ); } @override Map serialize() => { "port": port, "PAT": PAT, "reverse": path, }; } class Containered extends SerializerDeserializer { Containered({ this.image, this.args, this.command, this.env, this.volumes, this.exposes = const [], }); String? args; String? image; String? command; Map? env; Map? volumes; List exposes = []; @override deserialize(dynamic json) { try { json = json as Map; } catch (e) { return Containered(); } return Containered( args: json.containsKey("args") && json["args"] != null ? json["args"] : null, image: json.containsKey("image") && json["image"] != null ? json["image"] : null, command: json.containsKey("command") && json["command"] != null ? json["command"] : null, env: json.containsKey("env") && json["env"] != null ? json["env"] : null, volumes: json.containsKey("volumes") && json["volumes"] != null ? json["volumes"] : null, exposes: json.containsKey("exposes") && json["exposes"] != null ? fromListJson(json["exposes"], Expose()) : [], ); } @override Map serialize() { var w = { "args": args, "image": image, "command": command, "env": env, "volumes": volumes, "exposes": toListJson(exposes), }; return w; } }