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
use crate::{error::ErrorCode, state::MarketState, utils::*, ChangeMarket};
use anchor_lang::prelude::*;
impl<'info> ChangeMarket<'info> {
pub fn process(
&mut self,
new_name: Option<String>,
new_description: Option<String>,
mutable: Option<bool>,
new_price: Option<u64>,
new_pieces_in_one_wallet: Option<u64>,
) -> Result<()> {
let market = &mut self.market;
let clock = &self.clock;
if market.state != MarketState::Suspended {
return Err(ErrorCode::MarketInInvalidState.into());
}
if let Some(end_date) = market.end_date {
if clock.unix_timestamp as u64 > end_date {
return Err(ErrorCode::MarketIsEnded.into());
}
}
if !market.mutable {
return Err(ErrorCode::MarketIsImmutable.into());
}
if let Some(new_name) = new_name {
if new_name.len() > NAME_MAX_LEN {
return Err(ErrorCode::NameIsTooLong.into());
}
market.name = puffed_out_string(new_name, NAME_MAX_LEN);
}
if let Some(new_description) = new_description {
if new_description.len() > DESCRIPTION_MAX_LEN {
return Err(ErrorCode::DescriptionIsTooLong.into());
}
market.description = puffed_out_string(new_description, DESCRIPTION_MAX_LEN);
}
if let Some(mutable) = mutable {
market.mutable = mutable;
}
if let Some(new_price) = new_price {
if new_price == 0 {
return Err(ErrorCode::PriceIsZero.into());
}
market.price = new_price;
}
if let Some(new_pieces_in_one_wallet) = new_pieces_in_one_wallet {
market.pieces_in_one_wallet = Some(new_pieces_in_one_wallet);
}
Ok(())
}
}