-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsimple.scala
More file actions
86 lines (78 loc) · 2.71 KB
/
simple.scala
File metadata and controls
86 lines (78 loc) · 2.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
//> using scala 3.3.7
//> using dep io.github.ghstrider::cv4s::0.0.1
import cv4s.*
import io.circe.parser.*
import Resume.given
val resumeJson = """{
"basics": {
"name": "Richard Hendriks",
"label": "Programmer",
"email": "richard.hendriks@mail.com",
"location": {
"city": "San Francisco",
"countryCode": "US"
},
"profiles": [
{"network": "GitHub", "username": "richardh"}
]
},
"work": [
{
"name": "Pied Piper",
"position": "CEO/President",
"startDate": "2013-12-01",
"endDate": "2014-12-01",
"highlights": ["Built an algorithm for compression"]
}
],
"skills": [
{"name": "Web Development", "level": "Master", "keywords": ["HTML", "CSS", "Javascript"]},
{"name": "Compression", "level": "Master", "keywords": ["Mpeg", "MP4", "GIF"]}
],
"education": [
{
"institution": "University of Oklahoma",
"area": "Information Technology",
"studyType": "Bachelor"
}
]
}"""
@main def simple(): Unit =
decode[Resume](resumeJson) match
case Left(error) =>
println(s"Failed to parse resume: $error")
case Right(resume) =>
// Access basic info
val name = resume.basics.flatMap(_.name).getOrElse("Unknown")
val label = resume.basics.flatMap(_.label).getOrElse("N/A")
val city = resume.basics.flatMap(_.location).flatMap(_.city).getOrElse("N/A")
println(s"Name: $name")
println(s"Label: $label")
println(s"City: $city")
// List all skills
val skills = resume.skills.getOrElse(Nil)
println(s"\nSkills (${skills.size}):")
skills.foreach { s =>
val keywords = s.keywords.getOrElse(Nil).mkString(", ")
println(s" - ${s.name.getOrElse("?")} [${s.level.getOrElse("?")}]: $keywords")
}
// List work experience
val work = resume.work.getOrElse(Nil)
println(s"\nWork Experience (${work.size}):")
work.foreach { w =>
val period = s"${w.startDate.getOrElse("?")} to ${w.endDate.getOrElse("present")}"
println(s" - ${w.position.getOrElse("?")} at ${w.name.getOrElse("?")} ($period)")
w.highlights.getOrElse(Nil).foreach(h => println(s" * $h"))
}
// List education
val education = resume.education.getOrElse(Nil)
println(s"\nEducation (${education.size}):")
education.foreach { e =>
println(s" - ${e.studyType.getOrElse("?")} in ${e.area.getOrElse("?")} at ${e.institution.getOrElse("?")}")
}
// Social profiles
val profiles = resume.basics.flatMap(_.profiles).getOrElse(Nil)
println(s"\nProfiles (${profiles.size}):")
profiles.foreach { p =>
println(s" - ${p.network.getOrElse("?")}: ${p.username.getOrElse("?")}")
}