소스 검색

Change JobOfferListMessage message serialization to match PS code

jherve 1 년 전
부모
커밋
b09a1fe9ec
4개의 변경된 파일17개의 추가작업 그리고 35개의 파일을 삭제
  1. 13 16
      native/src/job_search/messages.py
  2. 2 3
      native/src/job_search/writer.py
  3. 0 8
      src/NativeMessage.js
  4. 2 8
      src/NativeMessage.purs

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

@@ -44,22 +44,7 @@ class BackgroundScriptMessage(Message):
 
 class NativeMessage(Message):
     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
@@ -108,16 +93,25 @@ class InitialConfigurationMessage(BackgroundScriptMessage):
 class JobOfferListMessage(NativeMessage):
     job_offers: list[JobOffer]
 
+    def serialize(self):
+        return {"tag": "NativeMessageJobOfferList", "values": [self.job_offers]}
+
 
 @dataclass
 class JobAddedMessage(NativeMessage):
     job: JobOffer
 
+    def serialize(self):
+        return {"tag": "NativeMessageJobAdded", "values": [asdict(self)]}
+
 
 @dataclass
 class JobAlreadyExistsMessage(NativeMessage):
     job_id: str
 
+    def serialize(self):
+        return {"tag": "NativeMessageJobAlreadyExists", "values": [asdict(self)]}
+
 
 class LogLevel(Enum):
     DEBUG = "debug"
@@ -141,3 +135,6 @@ class LogMessage(NativeMessage):
     @staticmethod
     def 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)
 
                 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:
                 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 as Port
 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.Encode (class EncodeJson)
 import Data.Argonaut.Encode.Generic (genericEncodeJson)
@@ -45,22 +44,13 @@ type NativePythonJobOffer = {
   application_date :: Maybe String,
   application_rejection_date :: Maybe String
 }
-type NativePythonMessage m = {tag :: String | m}
 
 derive instance Generic NativeMessage _
 instance Show NativeMessage where show = genericShow
 instance EncodeJson NativeMessage where encodeJson a = genericEncodeJson a
 
-foreign import toArrayOfObjects :: String -> Json -> Json
-
 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 = connectNative