anyhowing continues
This commit is contained in:
parent
f09c73611f
commit
7bd385d580
@ -64,10 +64,10 @@ pub struct BankItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl BankItem {
|
impl BankItem {
|
||||||
pub async fn with_entity_id<F, Fut, T>(&self, mut param: T, mut func: F) -> Result<T, ItemStateError>
|
pub async fn with_entity_id<F, Fut, T>(&self, mut param: T, mut func: F) -> Result<T, anyhow::Error>
|
||||||
where
|
where
|
||||||
F: FnMut(T, ItemEntityId) -> Fut,
|
F: FnMut(T, ItemEntityId) -> Fut,
|
||||||
Fut: Future<Output=Result<T, ItemStateError>>,
|
Fut: Future<Output=Result<T, anyhow::Error>>,
|
||||||
{
|
{
|
||||||
match &self.item {
|
match &self.item {
|
||||||
BankItemDetail::Individual(individual_item) => {
|
BankItemDetail::Individual(individual_item) => {
|
||||||
@ -125,27 +125,27 @@ impl BankState {
|
|||||||
self.item_id_counter = base_item_id + self.bank.0.len() as u32;
|
self.item_id_counter = base_item_id + self.bank.0.len() as u32;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn add_meseta(&mut self, amount: u32) -> Result<(), ItemStateError> {
|
pub fn add_meseta(&mut self, amount: u32) -> Result<(), anyhow::Error> {
|
||||||
if self.meseta.0 + amount > 999999 {
|
if self.meseta.0 + amount > 999999 {
|
||||||
return Err(ItemStateError::FullOfMeseta)
|
return Err(ItemStateError::FullOfMeseta.into())
|
||||||
}
|
}
|
||||||
self.meseta.0 += amount;
|
self.meseta.0 += amount;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn remove_meseta(&mut self, amount: u32) -> Result<(), ItemStateError> {
|
pub fn remove_meseta(&mut self, amount: u32) -> Result<(), anyhow::Error> {
|
||||||
if amount > self.meseta.0 {
|
if amount > self.meseta.0 {
|
||||||
return Err(ItemStateError::InvalidMesetaRemoval(amount))
|
return Err(ItemStateError::InvalidMesetaRemoval(amount).into())
|
||||||
}
|
}
|
||||||
self.meseta.0 -= amount;
|
self.meseta.0 -= amount;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn add_inventory_item(&mut self, item: InventoryItem) -> Result<AddItemResult, BankError> {
|
pub fn add_inventory_item(&mut self, item: InventoryItem) -> Result<AddItemResult, anyhow::Error> {
|
||||||
match item.item {
|
match item.item {
|
||||||
InventoryItemDetail::Individual(iitem) => {
|
InventoryItemDetail::Individual(iitem) => {
|
||||||
if self.bank.0.len() >= 30 {
|
if self.bank.0.len() >= 30 {
|
||||||
Err(BankError::BankFull)
|
Err(BankError::BankFull.into())
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
self.bank.0.push(BankItem {
|
self.bank.0.push(BankItem {
|
||||||
@ -166,7 +166,7 @@ impl BankState {
|
|||||||
match existing_stack {
|
match existing_stack {
|
||||||
Some(existing_stack) => {
|
Some(existing_stack) => {
|
||||||
if existing_stack.entity_ids.len() + sitem.entity_ids.len() > sitem.tool.max_stack() {
|
if existing_stack.entity_ids.len() + sitem.entity_ids.len() > sitem.tool.max_stack() {
|
||||||
Err(BankError::StackFull)
|
Err(BankError::StackFull.into())
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
existing_stack.entity_ids.append(&mut sitem.entity_ids.clone());
|
existing_stack.entity_ids.append(&mut sitem.entity_ids.clone());
|
||||||
@ -175,7 +175,7 @@ impl BankState {
|
|||||||
},
|
},
|
||||||
None => {
|
None => {
|
||||||
if self.bank.0.len() >= 30 {
|
if self.bank.0.len() >= 30 {
|
||||||
Err(BankError::BankFull)
|
Err(BankError::BankFull.into())
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
self.bank.0.push(BankItem {
|
self.bank.0.push(BankItem {
|
||||||
|
@ -33,7 +33,7 @@ pub struct FloorItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl FloorItem {
|
impl FloorItem {
|
||||||
pub async fn with_entity_id<F, Fut, T>(&self, mut param: T, mut func: F) -> Result<T, ItemStateError>
|
pub async fn with_entity_id<F, Fut, T>(&self, mut param: T, mut func: F) -> Result<T, anyhow::Error>
|
||||||
where
|
where
|
||||||
F: FnMut(T, ItemEntityId) -> Fut,
|
F: FnMut(T, ItemEntityId) -> Fut,
|
||||||
Fut: Future<Output=Result<T, ItemStateError>>,
|
Fut: Future<Output=Result<T, ItemStateError>>,
|
||||||
@ -53,10 +53,10 @@ impl FloorItem {
|
|||||||
Ok(param)
|
Ok(param)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn with_mag<F, Fut, T>(&self, mut param: T, mut func: F) -> Result<T, ItemStateError>
|
pub async fn with_mag<F, Fut, T>(&self, mut param: T, mut func: F) -> Result<T, anyhow::Error>
|
||||||
where
|
where
|
||||||
F: FnMut(T, ItemEntityId, Mag) -> Fut,
|
F: FnMut(T, ItemEntityId, Mag) -> Fut,
|
||||||
Fut: Future<Output=Result<T, ItemStateError>>,
|
Fut: Future<Output=Result<T, anyhow::Error>>,
|
||||||
{
|
{
|
||||||
if let FloorItemDetail::Individual(individual_item) = &self.item {
|
if let FloorItemDetail::Individual(individual_item) = &self.item {
|
||||||
if let ItemDetail::Mag(mag) = &individual_item.item {
|
if let ItemDetail::Mag(mag) = &individual_item.item {
|
||||||
|
@ -60,7 +60,7 @@ impl InventoryItemDetail {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: this should probably go somewhere a bit more fundamental like ItemDetail
|
// TODO: this should probably go somewhere a bit more fundamental like ItemDetail
|
||||||
pub fn sell_price(&self) -> Result<u32, ItemStateError> {
|
pub fn sell_price(&self) -> Result<u32, anyhow::Error> {
|
||||||
match self {
|
match self {
|
||||||
InventoryItemDetail::Individual(individual_item) => {
|
InventoryItemDetail::Individual(individual_item) => {
|
||||||
match &individual_item.item {
|
match &individual_item.item {
|
||||||
@ -102,7 +102,7 @@ impl InventoryItemDetail {
|
|||||||
Ok((ToolShopItem::from(d).price() / 8) as u32)
|
Ok((ToolShopItem::from(d).price() / 8) as u32)
|
||||||
},
|
},
|
||||||
ItemDetail::Mag(_m) => {
|
ItemDetail::Mag(_m) => {
|
||||||
Err(ItemStateError::ItemNotSellable)
|
Err(ItemStateError::ItemNotSellable.into())
|
||||||
},
|
},
|
||||||
ItemDetail::ESWeapon(_e) => {
|
ItemDetail::ESWeapon(_e) => {
|
||||||
Ok(10u32)
|
Ok(10u32)
|
||||||
@ -126,10 +126,10 @@ pub struct InventoryItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl InventoryItem {
|
impl InventoryItem {
|
||||||
pub async fn with_entity_id<F, Fut, T>(&self, mut param: T, mut func: F) -> Result<T, ItemStateError>
|
pub async fn with_entity_id<F, Fut, T>(&self, mut param: T, mut func: F) -> Result<T, anyhow::Error>
|
||||||
where
|
where
|
||||||
F: FnMut(T, ItemEntityId) -> Fut,
|
F: FnMut(T, ItemEntityId) -> Fut,
|
||||||
Fut: Future<Output=Result<T, ItemStateError>>,
|
Fut: Future<Output=Result<T, anyhow::Error>>,
|
||||||
{
|
{
|
||||||
match &self.item {
|
match &self.item {
|
||||||
InventoryItemDetail::Individual(individual_item) => {
|
InventoryItemDetail::Individual(individual_item) => {
|
||||||
@ -145,10 +145,10 @@ impl InventoryItem {
|
|||||||
Ok(param)
|
Ok(param)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn with_mag<F, Fut, T>(&self, mut param: T, mut func: F) -> Result<T, ItemStateError>
|
pub async fn with_mag<F, Fut, T>(&self, mut param: T, mut func: F) -> Result<T, anyhow::Error>
|
||||||
where
|
where
|
||||||
F: FnMut(T, ItemEntityId, Mag) -> Fut,
|
F: FnMut(T, ItemEntityId, Mag) -> Fut,
|
||||||
Fut: Future<Output=Result<T, ItemStateError>>,
|
Fut: Future<Output=Result<T, anyhow::Error>>,
|
||||||
{
|
{
|
||||||
if let InventoryItemDetail::Individual(individual_item) = &self.item {
|
if let InventoryItemDetail::Individual(individual_item) = &self.item {
|
||||||
if let ItemDetail::Mag(mag) = &individual_item.item {
|
if let ItemDetail::Mag(mag) = &individual_item.item {
|
||||||
@ -205,11 +205,11 @@ impl InventoryState {
|
|||||||
self.inventory.0.len()
|
self.inventory.0.len()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn add_floor_item(&mut self, item: FloorItem) -> Result<AddItemResult, InventoryError> {
|
pub fn add_floor_item(&mut self, item: FloorItem) -> Result<AddItemResult, anyhow::Error> {
|
||||||
match item.item {
|
match item.item {
|
||||||
FloorItemDetail::Individual(iitem) => {
|
FloorItemDetail::Individual(iitem) => {
|
||||||
if self.inventory.0.len() >= 30 {
|
if self.inventory.0.len() >= 30 {
|
||||||
Err(InventoryError::InventoryFull)
|
Err(InventoryError::InventoryFull.into())
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
self.inventory.0.push(InventoryItem {
|
self.inventory.0.push(InventoryItem {
|
||||||
@ -229,7 +229,7 @@ impl InventoryState {
|
|||||||
match existing_stack {
|
match existing_stack {
|
||||||
Some(existing_stack) => {
|
Some(existing_stack) => {
|
||||||
if existing_stack.entity_ids.len() + sitem.entity_ids.len() > sitem.tool.max_stack() {
|
if existing_stack.entity_ids.len() + sitem.entity_ids.len() > sitem.tool.max_stack() {
|
||||||
Err(InventoryError::StackFull)
|
Err(InventoryError::StackFull.into())
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
existing_stack.entity_ids.append(&mut sitem.entity_ids.clone());
|
existing_stack.entity_ids.append(&mut sitem.entity_ids.clone());
|
||||||
@ -238,7 +238,7 @@ impl InventoryState {
|
|||||||
},
|
},
|
||||||
None => {
|
None => {
|
||||||
if self.inventory.0.len() >= 30 {
|
if self.inventory.0.len() >= 30 {
|
||||||
Err(InventoryError::InventoryFull)
|
Err(InventoryError::InventoryFull.into())
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
self.inventory.0.push(InventoryItem {
|
self.inventory.0.push(InventoryItem {
|
||||||
@ -253,7 +253,7 @@ impl InventoryState {
|
|||||||
},
|
},
|
||||||
FloorItemDetail::Meseta(meseta) => {
|
FloorItemDetail::Meseta(meseta) => {
|
||||||
if self.meseta == Meseta(999999) {
|
if self.meseta == Meseta(999999) {
|
||||||
Err(InventoryError::MesetaFull)
|
Err(InventoryError::MesetaFull.into())
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
self.meseta.0 = std::cmp::min(self.meseta.0 + meseta.0, 999999);
|
self.meseta.0 = std::cmp::min(self.meseta.0 + meseta.0, 999999);
|
||||||
@ -263,11 +263,11 @@ impl InventoryState {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn add_item(&mut self, item: InventoryItem) -> Result<(AddItemResult, InventoryItem), InventoryError> {
|
pub fn add_item(&mut self, item: InventoryItem) -> Result<(AddItemResult, InventoryItem), anyhow::Error> {
|
||||||
match &item.item {
|
match &item.item {
|
||||||
InventoryItemDetail::Individual(_) => {
|
InventoryItemDetail::Individual(_) => {
|
||||||
if self.inventory.0.len() >= 30 {
|
if self.inventory.0.len() >= 30 {
|
||||||
Err(InventoryError::InventoryFull)
|
Err(InventoryError::InventoryFull.into())
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
self.inventory.0.push(item);
|
self.inventory.0.push(item);
|
||||||
@ -290,7 +290,7 @@ impl InventoryState {
|
|||||||
match existing_stack {
|
match existing_stack {
|
||||||
Some(existing_stack) => {
|
Some(existing_stack) => {
|
||||||
if existing_stack.entity_ids.len() + sitem.entity_ids.len() > sitem.tool.max_stack() {
|
if existing_stack.entity_ids.len() + sitem.entity_ids.len() > sitem.tool.max_stack() {
|
||||||
Err(InventoryError::StackFull)
|
Err(InventoryError::StackFull.into())
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
existing_stack.entity_ids.append(&mut sitem.entity_ids.clone());
|
existing_stack.entity_ids.append(&mut sitem.entity_ids.clone());
|
||||||
@ -307,7 +307,7 @@ impl InventoryState {
|
|||||||
},
|
},
|
||||||
None => {
|
None => {
|
||||||
if self.inventory.0.len() >= 30 {
|
if self.inventory.0.len() >= 30 {
|
||||||
Err(InventoryError::InventoryFull)
|
Err(InventoryError::InventoryFull.into())
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
self.inventory.0.push(item);
|
self.inventory.0.push(item);
|
||||||
@ -370,25 +370,25 @@ impl InventoryState {
|
|||||||
.find(|i| i.item_id == *item_id)
|
.find(|i| i.item_id == *item_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn add_meseta(&mut self, amount: u32) -> Result<(), ItemStateError> {
|
pub fn add_meseta(&mut self, amount: u32) -> Result<(), anyhow::Error> {
|
||||||
if self.meseta.0 == 999999 {
|
if self.meseta.0 == 999999 {
|
||||||
return Err(ItemStateError::FullOfMeseta)
|
return Err(ItemStateError::FullOfMeseta.into())
|
||||||
}
|
}
|
||||||
self.meseta.0 = std::cmp::min(self.meseta.0 + amount, 999999);
|
self.meseta.0 = std::cmp::min(self.meseta.0 + amount, 999999);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn add_meseta_no_overflow(&mut self, amount: u32) -> Result<(), ItemStateError> {
|
pub fn add_meseta_no_overflow(&mut self, amount: u32) -> Result<(), anyhow::Error> {
|
||||||
if self.meseta.0 + amount > 999999 {
|
if self.meseta.0 + amount > 999999 {
|
||||||
return Err(ItemStateError::FullOfMeseta)
|
return Err(ItemStateError::FullOfMeseta.into())
|
||||||
}
|
}
|
||||||
self.meseta.0 += amount;
|
self.meseta.0 += amount;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn remove_meseta(&mut self, amount: u32) -> Result<(), ItemStateError> {
|
pub fn remove_meseta(&mut self, amount: u32) -> Result<(), anyhow::Error> {
|
||||||
if amount > self.meseta.0 {
|
if amount > self.meseta.0 {
|
||||||
return Err(ItemStateError::InvalidMesetaRemoval(amount))
|
return Err(ItemStateError::InvalidMesetaRemoval(amount).into())
|
||||||
}
|
}
|
||||||
self.meseta.0 -= amount;
|
self.meseta.0 -= amount;
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -22,6 +22,8 @@ pub enum ItemStateError {
|
|||||||
NoCharacter(CharacterEntityId),
|
NoCharacter(CharacterEntityId),
|
||||||
#[error("room {0} not found")]
|
#[error("room {0} not found")]
|
||||||
NoRoom(RoomId),
|
NoRoom(RoomId),
|
||||||
|
#[error("inventory item {0} not found")]
|
||||||
|
NoInventoryItem(ClientItemId),
|
||||||
#[error("floor item {0} not found")]
|
#[error("floor item {0} not found")]
|
||||||
NoFloorItem(ClientItemId),
|
NoFloorItem(ClientItemId),
|
||||||
#[error("expected {0} to be a tool")]
|
#[error("expected {0} to be a tool")]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user