Parcourir la source

Add Parser type

jherve il y a 2 ans
Parent
commit
f89f8a3408
1 fichiers modifiés avec 12 ajouts et 10 suppressions
  1. 12 10
      src/LinkedIn/ArtDecoCard.purs

+ 12 - 10
src/LinkedIn/ArtDecoCard.purs

@@ -21,12 +21,14 @@ import Web.DOM.Element as E
 import Web.DOM.NodeList as NL
 import Web.DOM.ParentNode (QuerySelector(..), querySelector, querySelectorAll)
 
+type Parser a = Node → Effect (Either String a)
+
 data ArtDecoPvsEntitySubComponent = ArtDecoPvsEntitySubComponent DetachedNode
 derive instance Generic ArtDecoPvsEntitySubComponent _
 instance Show ArtDecoPvsEntitySubComponent where
   show = genericShow
 
-parseArtDecoPvsEntitySubComponent ∷ Node → Effect (Either String ArtDecoPvsEntitySubComponent)
+parseArtDecoPvsEntitySubComponent ∷ Parser ArtDecoPvsEntitySubComponent
 parseArtDecoPvsEntitySubComponent n = do
   content <- queryAndDetachOne "span[aria-hidden=true]" n
   pure $ ado
@@ -38,7 +40,7 @@ derive instance Generic ArtDecoCenterContent _
 instance Show ArtDecoCenterContent where
   show = genericShow
 
-parseArtDecoCenterContent ∷ Node → Effect (Either String ArtDecoCenterContent)
+parseArtDecoCenterContent ∷ Parser ArtDecoCenterContent
 parseArtDecoCenterContent n = do
   list <- queryManyAndParse ":scope > ul > li" parseArtDecoPvsEntitySubComponent n
   pure $ ado
@@ -55,7 +57,7 @@ derive instance Generic ArtDecoCenterHeader _
 instance Show ArtDecoCenterHeader where
   show = genericShow
 
-parseArtDecoCenterHeader :: Node -> Effect (Either String ArtDecoCenterHeader)
+parseArtDecoCenterHeader :: Parser ArtDecoCenterHeader
 parseArtDecoCenterHeader n = do
   bold <- queryAndDetachOne ":scope div.t-bold > span[aria-hidden=true]" n
   normal <- queryAndDetachOne ":scope span.t-normal:not(t-black--light) > span[aria-hidden=true]" n
@@ -74,7 +76,7 @@ derive instance Generic ArtDecoCenter _
 instance Show ArtDecoCenter where
   show = genericShow
 
-parseArtDecoCenter :: Node -> Effect (Either String ArtDecoCenter)
+parseArtDecoCenter :: Parser ArtDecoCenter
 parseArtDecoCenter n = do
   header <- queryOneAndParse ":scope > div" parseArtDecoCenterHeader n
   content <- queryOneAndParse ":scope > div ~ div" parseArtDecoCenterContent n
@@ -93,7 +95,7 @@ derive instance Generic ArtDecoPvsEntity _
 instance Show ArtDecoPvsEntity where
   show = genericShow
 
-parseArtDecoPvsEntity :: Node -> Effect (Either String ArtDecoPvsEntity)
+parseArtDecoPvsEntity :: Parser ArtDecoPvsEntity
 parseArtDecoPvsEntity n = do
   center <- queryOneAndParse ":scope > div.display-flex" parseArtDecoCenter n
 
@@ -109,7 +111,7 @@ derive instance Generic ArtDecoCardElement _
 instance Show ArtDecoCardElement where
   show = genericShow
 
-parseArtDecoCard :: Node -> Effect (Either String ArtDecoCardElement)
+parseArtDecoCard :: Parser ArtDecoCardElement
 parseArtDecoCard n = do
   pvs <- queryOneAndParse ":scope div.pvs-entity--padded" parseArtDecoPvsEntity n
 
@@ -137,7 +139,7 @@ queryAll selector n = do
   found <- querySelectorAll (QuerySelector selector) $ toParentNode' n
   liftA1 NEL.fromFoldable $ NL.toArray found
 
-queryAndDetachOne ∷ String -> Node → Effect (Either String DetachedNode)
+queryAndDetachOne ∷ String -> Parser DetachedNode
 queryAndDetachOne selector n = do
   node <- queryOne selector n
   case node of
@@ -146,7 +148,7 @@ queryAndDetachOne selector n = do
       node <- toDetached node
       pure $ Right node
 
-queryAndDetachMany ∷ String -> Node → Effect (Either String (NonEmptyList DetachedNode))
+queryAndDetachMany ∷ String -> Parser (NonEmptyList DetachedNode)
 queryAndDetachMany selector n = do
   nodes <- queryAll selector n
   case nodes of
@@ -155,7 +157,7 @@ queryAndDetachMany selector n = do
       nodes <- traverse toDetached nodes
       pure $ Right nodes
 
-queryOneAndParse ∷ ∀ a. String → (Node → Effect (Either String a)) → Node → Effect (Either String a)
+queryOneAndParse ∷ ∀ a. String → Parser a → Parser a
 queryOneAndParse selector parser n = do
   node <- queryOne selector n
 
@@ -163,7 +165,7 @@ queryOneAndParse selector parser n = do
     Nothing -> pure $ Left $ "Could not find node with selector " <> selector
     Just node -> parser node
 
-queryManyAndParse ∷ ∀ a. String → (Node → Effect (Either String a)) → Node → Effect (Either String (NonEmptyList a))
+queryManyAndParse ∷ ∀ a. String → Parser a → Parser (NonEmptyList a)
 queryManyAndParse selector parser n = do
   nodes <- queryAll selector n
   case nodes of