Browse Source

Change JobOfferListMessage message serialization to match PS code

jherve 1 year ago
parent
commit
b09a1fe9ec

+ 13 - 16
native/src/job_search/messages.py

@@ -44,22 +44,7 @@ class BackgroundScriptMessage(Message):
 
 
 class NativeMessage(Message):
 class NativeMessage(Message):
     def serialize(self):
     def serialize(self):
-        if isinstance(self, JobOfferListMessage):
-            tag = "NativeMessageJobOfferList"
-            values = asdict(self)
-        elif isinstance(self, JobAddedMessage):
-            tag = "NativeMessageJobAdded"
-            values = [asdict(self)]
-        elif isinstance(self, JobAlreadyExistsMessage):
-            tag = "NativeMessageJobAlreadyExists"
-            values = [asdict(self)]
-        elif isinstance(self, LogMessage):
-            tag = "NativeMessageLog"
-            values = [asdict(self)]
-        else:
-            raise TypeError(f"No tag was associated to {type(self)} for serialization")
-
-        return {"tag": tag, "values": values}
+        raise NotImplementedError(f"No tag was associated to {type(self)} for serialization")
 
 
 
 
 @dataclass
 @dataclass
@@ -108,16 +93,25 @@ class InitialConfigurationMessage(BackgroundScriptMessage):
 class JobOfferListMessage(NativeMessage):
 class JobOfferListMessage(NativeMessage):
     job_offers: list[JobOffer]
     job_offers: list[JobOffer]
 
 
+    def serialize(self):
+        return {"tag": "NativeMessageJobOfferList", "values": [self.job_offers]}
+
 
 
 @dataclass
 @dataclass
 class JobAddedMessage(NativeMessage):
 class JobAddedMessage(NativeMessage):
     job: JobOffer
     job: JobOffer
 
 
+    def serialize(self):
+        return {"tag": "NativeMessageJobAdded", "values": [asdict(self)]}
+
 
 
 @dataclass
 @dataclass
 class JobAlreadyExistsMessage(NativeMessage):
 class JobAlreadyExistsMessage(NativeMessage):
     job_id: str
     job_id: str
 
 
+    def serialize(self):
+        return {"tag": "NativeMessageJobAlreadyExists", "values": [asdict(self)]}
+
 
 
 class LogLevel(Enum):
 class LogLevel(Enum):
     DEBUG = "debug"
     DEBUG = "debug"
@@ -141,3 +135,6 @@ class LogMessage(NativeMessage):
     @staticmethod
     @staticmethod
     def error(**kwargs):
     def error(**kwargs):
         return LogMessage(level=LogLevel.ERROR, **kwargs)
         return LogMessage(level=LogLevel.ERROR, **kwargs)
+
+    def serialize(self):
+        return {"tag": "NativeMessageLog", "values": [asdict(self)]}

+ 2 - 3
native/src/job_search/writer.py

@@ -41,9 +41,8 @@ class Application:
                 self.handle_message(received_message)
                 self.handle_message(received_message)
 
 
                 if self.job_storage:
                 if self.job_storage:
-                    self.read_writer.send_message(
-                        JobOfferListMessage(self.job_storage.read_all())
-                    )
+                    offers = list(self.job_storage.read_all().values())
+                    self.read_writer.send_message(JobOfferListMessage(offers))
 
 
             except Exception as e:
             except Exception as e:
                 exc_info = sys.exc_info()
                 exc_info = sys.exc_info()

+ 0 - 8
src/NativeMessage.js

@@ -1,8 +0,0 @@
-export function toArrayOfObjects(field) {
-    return function (obj) {
-        return {
-            values: [Object.entries(obj.values[field]).map(a => a[1])],
-            tag: obj.tag
-        };
-    }
-}

+ 2 - 8
src/NativeMessage.purs

@@ -7,8 +7,7 @@ import Browser.WebExt.Message (Message, mkMessage, unwrapMessage)
 import Browser.WebExt.Port (Port, onDisconnectAddListener, onMessageAddListener)
 import Browser.WebExt.Port (Port, onDisconnectAddListener, onMessageAddListener)
 import Browser.WebExt.Port as Port
 import Browser.WebExt.Port as Port
 import Browser.WebExt.Runtime (Application, connectNative)
 import Browser.WebExt.Runtime (Application, connectNative)
-import Data.Argonaut.Core (Json)
-import Data.Argonaut.Decode (class DecodeJson, decodeJson, printJsonDecodeError)
+import Data.Argonaut.Decode (class DecodeJson, printJsonDecodeError)
 import Data.Argonaut.Decode.Generic (genericDecodeJson)
 import Data.Argonaut.Decode.Generic (genericDecodeJson)
 import Data.Argonaut.Encode (class EncodeJson)
 import Data.Argonaut.Encode (class EncodeJson)
 import Data.Argonaut.Encode.Generic (genericEncodeJson)
 import Data.Argonaut.Encode.Generic (genericEncodeJson)
@@ -45,22 +44,13 @@ type NativePythonJobOffer = {
   application_date :: Maybe String,
   application_date :: Maybe String,
   application_rejection_date :: Maybe String
   application_rejection_date :: Maybe String
 }
 }
-type NativePythonMessage m = {tag :: String | m}
 
 
 derive instance Generic NativeMessage _
 derive instance Generic NativeMessage _
 instance Show NativeMessage where show = genericShow
 instance Show NativeMessage where show = genericShow
 instance EncodeJson NativeMessage where encodeJson a = genericEncodeJson a
 instance EncodeJson NativeMessage where encodeJson a = genericEncodeJson a
 
 
-foreign import toArrayOfObjects :: String -> Json -> Json
-
 instance DecodeJson NativeMessage where
 instance DecodeJson NativeMessage where
-  decodeJson json = case decodeJson @(NativePythonMessage ()) json of
-    Right {tag: "NativeMessageJobOfferList"} -> genericDecodeJson $ toArrayOfObjects "job_offers" json
-    _ -> genericDecodeJson json
+  decodeJson json = genericDecodeJson json
 
 
 connectToNativeApplication ∷ Application → Effect Port
 connectToNativeApplication ∷ Application → Effect Port
 connectToNativeApplication = connectNative
 connectToNativeApplication = connectNative