Add Scala overloads to ProvinceEventUtils (#5040)

* Add Scala overloads to ProvinceEventUtils

- Add Scala overloads for isBlizzardEvent, isBeastsEvent, isEpidemicEvent,
  isFestivalEvent, isDroughtEvent, isFloodEvent, isImminentRiotEvent
- Add Scala overloads for beastsCount and beastInfo
- Update BUILD.bazel with required Scala model dependencies
- Add province event dependency to LegacyProvinceUtils for overload resolution

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Replace isInstanceOf with pattern matching in ProvinceEventUtils

- Use match expressions instead of isInstanceOf for type checks
- More idiomatic Scala style

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-04 07:42:02 -08:00
committed by GitHub
co-authored by Claude Opus 4.5
parent 51e9e9b14a
commit c753c4995a
3 changed files with 102 additions and 14 deletions
@@ -308,6 +308,9 @@ scala_library(
deps = [
"//src/main/protobuf/net/eagle0/eagle/common:province_event_scala_proto",
"//src/main/scala/net/eagle0/eagle/library/util:beast_utils",
"//src/main/scala/net/eagle0/eagle/model/state:beast_info",
"//src/main/scala/net/eagle0/eagle/model/state/date",
"//src/main/scala/net/eagle0/eagle/model/state/province:event",
],
)
@@ -2,28 +2,112 @@ package net.eagle0.eagle.library.util
import net.eagle0.eagle.common.beast_info.BeastInfo
import net.eagle0.eagle.common.province_event.*
import net.eagle0.eagle.model.state.province.{
BeastsEvent as BeastsEventC,
BlizzardEvent as BlizzardEventC,
DroughtEvent as DroughtEventC,
EpidemicEvent as EpidemicEventC,
FestivalEvent as FestivalEventC,
FloodEvent as FloodEventC,
ImminentRiotEvent as ImminentRiotEventC,
ProvinceEvent as ProvinceEventC
}
import net.eagle0.eagle.model.state.BeastInfo as BeastInfoC
object ProvinceEventUtils {
def isBlizzardEvent(event: ProvinceEvent): Boolean =
event.isInstanceOf[BlizzardEvent]
def isBeastsEvent(event: ProvinceEvent): Boolean =
event.isInstanceOf[BeastsEvent]
// ==================== Scala overloads ====================
def isEpidemicEvent(event: ProvinceEvent): Boolean =
event.isInstanceOf[EpidemicEvent]
/** Scala overload */
def isBlizzardEvent(event: ProvinceEventC): Boolean = event match {
case _: BlizzardEventC => true
case _ => false
}
def isFestivalEvent(event: ProvinceEvent): Boolean =
event.isInstanceOf[FestivalEvent]
/** Scala overload */
def isBeastsEvent(event: ProvinceEventC): Boolean = event match {
case _: BeastsEventC => true
case _ => false
}
def isDroughtEvent(event: ProvinceEvent): Boolean =
event.isInstanceOf[DroughtEvent]
/** Scala overload */
def isEpidemicEvent(event: ProvinceEventC): Boolean = event match {
case _: EpidemicEventC => true
case _ => false
}
def isFloodEvent(event: ProvinceEvent): Boolean =
event.isInstanceOf[FloodEvent]
/** Scala overload */
def isFestivalEvent(event: ProvinceEventC): Boolean = event match {
case _: FestivalEventC => true
case _ => false
}
def isImminentRiotEvent(event: ProvinceEvent): Boolean =
event.isInstanceOf[ImminentRiotEvent]
/** Scala overload */
def isDroughtEvent(event: ProvinceEventC): Boolean = event match {
case _: DroughtEventC => true
case _ => false
}
/** Scala overload */
def isFloodEvent(event: ProvinceEventC): Boolean = event match {
case _: FloodEventC => true
case _ => false
}
/** Scala overload */
def isImminentRiotEvent(event: ProvinceEventC): Boolean = event match {
case _: ImminentRiotEventC => true
case _ => false
}
/** Scala overload */
def beastsCount(event: ProvinceEventC): Int = event match {
case BeastsEventC(count, _, _, _) => count
case _ => 0
}
/** Scala overload */
def beastInfo(event: ProvinceEventC): Option[BeastInfoC] = event match {
case BeastsEventC(_, _, _, beastInfo) => Some(beastInfo)
case _ => None
}
// ==================== Proto overloads ====================
def isBlizzardEvent(event: ProvinceEvent): Boolean = event match {
case _: BlizzardEvent => true
case _ => false
}
def isBeastsEvent(event: ProvinceEvent): Boolean = event match {
case _: BeastsEvent => true
case _ => false
}
def isEpidemicEvent(event: ProvinceEvent): Boolean = event match {
case _: EpidemicEvent => true
case _ => false
}
def isFestivalEvent(event: ProvinceEvent): Boolean = event match {
case _: FestivalEvent => true
case _ => false
}
def isDroughtEvent(event: ProvinceEvent): Boolean = event match {
case _: DroughtEvent => true
case _ => false
}
def isFloodEvent(event: ProvinceEvent): Boolean = event match {
case _: FloodEvent => true
case _ => false
}
def isImminentRiotEvent(event: ProvinceEvent): Boolean = event match {
case _: ImminentRiotEvent => true
case _ => false
}
def beastsCount(event: ProvinceEvent): Int = event match {
case BeastsEvent(count: Int, _, _, _, _ /* unknownFieldSet */ ) => count
@@ -24,6 +24,7 @@ scala_library(
"//src/main/scala/net/eagle0/eagle/library/util:beast_utils",
"//src/main/scala/net/eagle0/eagle/library/util:legacy_battalion_utils",
"//src/main/scala/net/eagle0/eagle/library/util:province_event_utils",
"//src/main/scala/net/eagle0/eagle/model/state/province:event",
],
)