pub struct SupabaseResolver {
cache: GameDataCache,
}Expand description
Resolver backed by the Supabase REST API and GameDataCache.
Fields§
§cache: GameDataCacheImplementations§
Source§impl SupabaseResolver
impl SupabaseResolver
Sourcepub fn new(cache: GameDataCache) -> Self
pub fn new(cache: GameDataCache) -> Self
Wraps an initialized game-data cache as a resolver.
pub(crate) fn client(&self) -> &SupabaseClient
async fn fetch_rotation( &self, path: &str, label: &str, ) -> Result<String, ResolverError>
Trait Implementations§
Source§impl DataResolver for SupabaseResolver
impl DataResolver for SupabaseResolver
async fn get_spell( &self, spell_id: SpellId, ) -> Result<SpellDataFlat, ResolverError>
async fn get_spells( &self, spell_ids: &[SpellId], ) -> Result<Vec<SpellDataFlat>, ResolverError>
Source§async fn get_spell_effect(
&self,
spell_id: SpellId,
effect_index: u8,
) -> Result<SpellEffect, ResolverError>
async fn get_spell_effect( &self, spell_id: SpellId, effect_index: u8, ) -> Result<SpellEffect, ResolverError>
effect_index is 1-based (author-facing).async fn get_spell_effects( &self, spell_id: SpellId, ) -> Result<Vec<SpellEffect>, ResolverError>
async fn get_item(&self, item_id: i32) -> Result<ItemDataFlat, ResolverError>
Source§async fn find_consumable_items(
&self,
name_token: &str,
subclass: i32,
) -> Result<Vec<ItemDataFlat>, ResolverError>
async fn find_consumable_items( &self, name_token: &str, subclass: i32, ) -> Result<Vec<ItemDataFlat>, ResolverError>
Finds consumable items whose tokenized names contain
name_token.async fn get_scaling_data(&self) -> Result<Arc<ItemScalingData>, ResolverError>
async fn get_power_types(&self) -> Result<Vec<PowerTypeFlat>, ResolverError>
async fn get_spec(&self, spec_id: i32) -> Result<SpecDataFlat, ResolverError>
async fn get_trait_tree( &self, spec_id: i32, ) -> Result<TraitTreeFlat, ResolverError>
Source§async fn get_expansion_trait_tree(
&self,
expansion_id: i32,
system: &str,
) -> Result<ExpansionTraitTreeFlat, ResolverError>
async fn get_expansion_trait_tree( &self, expansion_id: i32, system: &str, ) -> Result<ExpansionTraitTreeFlat, ResolverError>
Fetch a class-agnostic expansion progression tree, such as Midnight’s Omnium Folio.
async fn get_rotation_script( &self, rotation_id: &str, ) -> Result<String, ResolverError>
Source§async fn get_spell_overrides(
&self,
spec_id: i32,
) -> Result<Vec<(SpellId, SpellId)>, ResolverError>
async fn get_spell_overrides( &self, spec_id: i32, ) -> Result<Vec<(SpellId, SpellId)>, ResolverError>
Required for resolver parity: a backend with no override table returns
Ok(vec![]).Source§async fn get_specialization_spells(
&self,
spec_id: i32,
) -> Result<Vec<SpellId>, ResolverError>
async fn get_specialization_spells( &self, spec_id: i32, ) -> Result<Vec<SpellId>, ResolverError>
Every spell id assigned to the spec in
SpecializationSpells; a backend with no table returns Ok(vec![]).Source§async fn get_racial_spells(
&self,
race_id: i32,
class_id: i32,
) -> Result<Vec<SpellId>, ResolverError>
async fn get_racial_spells( &self, race_id: i32, class_id: i32, ) -> Result<Vec<SpellId>, ResolverError>
Every racial ability the race grants the class; a backend with no table returns
Ok(vec![]). Read moreSource§async fn get_expected_stats(
&self,
expansion_id: i32,
lvl: i32,
) -> Result<ExpectedStatFlat, ResolverError>
async fn get_expected_stats( &self, expansion_id: i32, lvl: i32, ) -> Result<ExpectedStatFlat, ResolverError>
Required for resolver parity: return
ExpectedStatsNotFound when a backend cannot source it.Source§async fn get_item_damage_scaling(
&self,
item_level: i32,
weapon_type: &str,
) -> Result<ItemDamageScalingFlat, ResolverError>
async fn get_item_damage_scaling( &self, item_level: i32, weapon_type: &str, ) -> Result<ItemDamageScalingFlat, ResolverError>
Required for resolver parity: return
ItemDamageScalingNotFound when a backend cannot source it.Source§async fn get_enchantment(
&self,
enchantment_id: i32,
) -> Result<EnchantmentRow, ResolverError>
async fn get_enchantment( &self, enchantment_id: i32, ) -> Result<EnchantmentRow, ResolverError>
Required for resolver parity: return
EnchantmentNotFound when a backend cannot source it.Source§async fn search_spells(
&self,
query: &str,
limit: u32,
) -> Result<Vec<SpellSearchResult>, ResolverError>
async fn search_spells( &self, query: &str, limit: u32, ) -> Result<Vec<SpellSearchResult>, ResolverError>
Defaults to
Unsupported; a backend with no search index fails loud rather than returning empty.Source§async fn get_creature(
&self,
creature_id: i32,
) -> Result<CreatureFlat, ResolverError>
async fn get_creature( &self, creature_id: i32, ) -> Result<CreatureFlat, ResolverError>
Creature identity row (
Creature table) by NPC ID; defaults to Unsupported until a backend implements enemy resolution.Source§async fn get_creature_difficulties(
&self,
creature_id: i32,
) -> Result<Vec<CreatureDifficultyFlat>, ResolverError>
async fn get_creature_difficulties( &self, creature_id: i32, ) -> Result<Vec<CreatureDifficultyFlat>, ResolverError>
Every
CreatureDifficulty variant for a creature; defaults to Unsupported until a backend implements enemy resolution.Source§async fn get_content_tuning(
&self,
content_tuning_id: i32,
) -> Result<ContentTuningFlat, ResolverError>
async fn get_content_tuning( &self, content_tuning_id: i32, ) -> Result<ContentTuningFlat, ResolverError>
ContentTuning row by ID; defaults to Unsupported until a backend implements enemy resolution.Source§async fn get_content_tuning_x_difficulty(
&self,
content_tuning_id: i32,
) -> Result<Vec<ContentTuningXDifficultyFlat>, ResolverError>
async fn get_content_tuning_x_difficulty( &self, content_tuning_id: i32, ) -> Result<Vec<ContentTuningXDifficultyFlat>, ResolverError>
Every
ContentTuningXDifficulty mapping for a content tuning; defaults to Unsupported until a backend implements enemy resolution.Source§async fn get_content_tuning_x_expected(
&self,
content_tuning_id: i32,
) -> Result<Vec<ContentTuningXExpectedFlat>, ResolverError>
async fn get_content_tuning_x_expected( &self, content_tuning_id: i32, ) -> Result<Vec<ContentTuningXExpectedFlat>, ResolverError>
Every
ContentTuningXExpected mapping; row selection stays in the application layer.Source§async fn get_expected_stat_mod(
&self,
expected_stat_mod_id: i32,
) -> Result<ExpectedStatModFlat, ResolverError>
async fn get_expected_stat_mod( &self, expected_stat_mod_id: i32, ) -> Result<ExpectedStatModFlat, ResolverError>
ExpectedStatMod multiplier row by ID.Source§async fn get_challenge_mode_health(
&self,
keystone_level: i32,
) -> Result<ChallengeModeHealthFlat, ResolverError>
async fn get_challenge_mode_health( &self, keystone_level: i32, ) -> Result<ChallengeModeHealthFlat, ResolverError>
ChallengeModeHealth GameTable scalar by keystone level.Source§fn find_permanent_enchant(
&self,
query: &PermanentEnchantQuery,
) -> impl Future<Output = Result<Option<PermanentEnchantFlat>, ResolverError>> + Send
fn find_permanent_enchant( &self, query: &PermanentEnchantQuery, ) -> impl Future<Output = Result<Option<PermanentEnchantFlat>, ResolverError>> + Send
Resolves a named permanent enchant through the profession-derived
SimC index.Source§fn decode_traits(
&self,
spec_id: i32,
trait_string: &str,
) -> impl Future<Output = Result<TraitTreeWithSelections, ResolverError>> + Send
fn decode_traits( &self, spec_id: i32, trait_string: &str, ) -> impl Future<Output = Result<TraitTreeWithSelections, ResolverError>> + Send
Decode a loadout string against this spec’s tree into a raw selected tree; talent-tree interpretation is the caller’s job.
Auto Trait Implementations§
impl Freeze for SupabaseResolver
impl !RefUnwindSafe for SupabaseResolver
impl Send for SupabaseResolver
impl Sync for SupabaseResolver
impl Unpin for SupabaseResolver
impl UnsafeUnpin for SupabaseResolver
impl !UnwindSafe for SupabaseResolver
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more