#include "CrossLang.hpp" #include "TessesFramework/Serialization/BitConverter.hpp" #include "TessesFramework/Streams/ByteReader.hpp" #include "TessesFramework/Uuid.hpp" #include #include #include #include #include #include #include namespace Tesses::CrossLang { bool ToBool(TObject obj) { if(std::holds_alternative(obj)) { return true; } if(std::holds_alternative(obj)) { auto v = std::get(obj); return v.AsLong() != 0; } if(std::holds_alternative(obj)) { return !std::get(obj).empty(); } else if(std::holds_alternative(obj)) { return std::get(obj) != 0; } else if(std::holds_alternative(obj)) { return std::get(obj); } else if(std::holds_alternative(obj)) { return std::get(obj); } else if(std::holds_alternative(obj)) { return std::get(obj) != 0; } else if(std::holds_alternative>(obj)) { auto& dt = std::get>(obj); return !(dt->Year() == 1970 && dt->Month() == 1 && dt->Day() == 1 && dt->Hour() == 0 && dt->Minute() == 0 && dt->Second() == 0 && !dt->IsLocal()); } else if(std::holds_alternative>(obj)) { return std::get>(obj)->TotalSeconds() != 0; } else if(std::holds_alternative(obj)) { auto& uuid = std::get(obj); return !uuid.IsEmpty(); } else if(std::holds_alternative(obj)) { auto o = std::get(obj).obj; auto ls = dynamic_cast(o); auto aarray = dynamic_cast(o); auto dict = dynamic_cast(o); auto ba = dynamic_cast(o); auto nat = dynamic_cast(o); auto thrd = dynamic_cast(o); auto natObj = dynamic_cast(o); auto any = dynamic_cast(o); auto cls = dynamic_cast(o); if(cls!=nullptr) return true; if(natObj != nullptr) return natObj->ToBool(); if(any != nullptr) return any->any.has_value(); if(ls != nullptr) { return ls->Count() != 0; } if(aarray != nullptr) { return aarray->Count() != 0; } else if(dict != nullptr) { return !dict->items.empty(); } else if(ba != nullptr) { return !ba->data.empty(); } else if(nat != nullptr) { return !nat->GetDestroyed(); } else if(thrd != nullptr) { return !thrd->hasReturned; } return true; } return false; } }