ソースを参照

Change JSON encoding of "flexibility"

jherve 1 年間 前
コミット
3653850365
3 ファイル変更18 行追加12 行削除
  1. 1 6
      src/Background.purs
  2. 15 5
      src/LinkedIn/UI/Basic/Types.purs
  3. 2 1
      src/NativeMessage.purs

+ 1 - 6
src/Background.purs

@@ -20,7 +20,6 @@ import ExampleWebExt.RuntimeMessage (RuntimeMessage(..), onRuntimeMessageAddList
 import ExampleWebExt.Storage (clearAllJobs, getJobsPath, storeJob)
 import LinkedIn.Jobs.JobOffer (JobOffer(..))
 import LinkedIn.Output.Types (Output(..))
-import LinkedIn.UI.Basic.Types (JobFlexibility(..))
 
 main :: Effect Unit
 main = do
@@ -52,7 +51,6 @@ contentScriptMessageHandler
   where
     maybeMsg (JobOffer jo) = ado
       location <- jo.location
-      flexibility <- jo.flexibility
     in NativeMessageVisitedJobPage {
       url: url,
       jobTitle: jo.title,
@@ -62,10 +60,7 @@ contentScriptMessageHandler
       companyUrl: jo.companyLink,
       location,
       hasSimplifiedProcess: jo.hasSimplifiedApplicationProcess,
-      flexibility: case flexibility of
-        JobFlexOnSite -> "on_site"
-        JobFlexHybrid -> "hybrid"
-        JobFlexFullRemote -> "full_remote"
+      flexibility: jo.flexibility
     }
 
 contentScriptMessageHandler _ m (MessageSender {tab, id}) = do

+ 15 - 5
src/LinkedIn/UI/Basic/Types.purs

@@ -3,13 +3,13 @@ module LinkedIn.UI.Basic.Types where
 import Prelude
 
 import Data.Argonaut.Decode (class DecodeJson, JsonDecodeError(..))
-import Data.Argonaut.Decode.Decoders (decodeNumber)
+import Data.Argonaut.Decode.Decoders (decodeNumber, decodeString)
 import Data.Argonaut.Decode.Generic (genericDecodeJson)
-import Data.Argonaut.Encode (class EncodeJson)
+import Data.Argonaut.Encode (class EncodeJson, encodeJson)
 import Data.Argonaut.Encode.Encoders (encodeNumber, encodeString)
 import Data.Argonaut.Encode.Generic (genericEncodeJson)
 import Data.Date (Month(..), Year)
-import Data.Either (note)
+import Data.Either (Either(..), note)
 import Data.Enum (toEnum)
 import Data.Generic.Rep (class Generic)
 import Data.Int64 (Int64)
@@ -69,5 +69,15 @@ data JobFlexibility = JobFlexHybrid | JobFlexOnSite | JobFlexFullRemote
 derive instance Eq JobFlexibility
 derive instance Generic JobFlexibility _
 instance Show JobFlexibility where show = genericShow
-instance EncodeJson JobFlexibility where encodeJson a = genericEncodeJson a
-instance DecodeJson JobFlexibility where decodeJson a = genericDecodeJson a
+instance EncodeJson JobFlexibility where
+  encodeJson = case _ of
+    JobFlexHybrid -> encodeJson "hybrid"
+    JobFlexOnSite -> encodeJson "on_site"
+    JobFlexFullRemote -> encodeJson "full_remote"
+
+instance DecodeJson JobFlexibility where
+  decodeJson j = case decodeString j of
+    Right "hybrid" -> Right JobFlexHybrid
+    Right "on_site" -> Right JobFlexOnSite
+    Right "full_remote" -> Right JobFlexFullRemote
+    _ -> Left $ UnexpectedValue j

+ 2 - 1
src/NativeMessage.purs

@@ -17,6 +17,7 @@ import Data.Maybe (Maybe)
 import Data.Show.Generic (genericShow)
 import Effect (Effect)
 import Effect.Class.Console (log)
+import LinkedIn.UI.Basic.Types (JobFlexibility)
 
 data NativeMessage =
   NativeMessageBackground String
@@ -31,7 +32,7 @@ data NativeMessage =
     companyUrl :: String,
     location :: String,
     hasSimplifiedProcess :: Boolean,
-    flexibility :: String
+    flexibility :: Maybe JobFlexibility
   }
   | NativeMessageJobAlreadyExists {job_id :: String}
   | NativeMessageJobAdded {job :: NativePythonJobOffer}