errors.rs 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662
  1. use srml_support::decl_error;
  2. use membership::members;
  3. decl_error! {
  4. /// Discussion module predefined errors
  5. pub enum Error {
  6. /// Provided stake balance cannot be zero.
  7. StakeBalanceCannotBeZero,
  8. /// Cannot get the worker stake profile.
  9. NoWorkerStakeProfile,
  10. /// Current lead is not set.
  11. CurrentLeadNotSet,
  12. /// There is leader already, cannot hire another one.
  13. CannotHireLeaderWhenLeaderExists,
  14. /// Cannot fill opening with multiple applications.
  15. CannotHireMultipleLeaders,
  16. /// Not a lead account.
  17. IsNotLeadAccount,
  18. /// Opening text too short.
  19. OpeningTextTooShort,
  20. /// Opening text too long.
  21. OpeningTextTooLong,
  22. /// Opening does not exist.
  23. OpeningDoesNotExist,
  24. /// Insufficient balance to apply.
  25. InsufficientBalanceToApply,
  26. /// Unsigned origin.
  27. MembershipUnsignedOrigin,
  28. /// Member id is invalid.
  29. MembershipInvalidMemberId,
  30. /// Signer does not match controller account.
  31. ApplyOnWorkerOpeningSignerNotControllerAccount,
  32. /// Origin must be controller or root account of member.
  33. OriginIsNeitherMemberControllerOrRoot,
  34. /// Member already has an active application on the opening.
  35. MemberHasActiveApplicationOnOpening,
  36. /// Worker application text too long.
  37. WorkerApplicationTextTooLong,
  38. /// Worker application text too short.
  39. WorkerApplicationTextTooShort,
  40. /// Insufficient balance to cover stake.
  41. InsufficientBalanceToCoverStake,
  42. /// Origin is not applicant.
  43. OriginIsNotApplicant,
  44. /// Worker application does not exist.
  45. WorkerApplicationDoesNotExist,
  46. /// Successful worker application does not exist.
  47. SuccessfulWorkerApplicationDoesNotExist,
  48. /// Reward policy has invalid next payment block number.
  49. FillOpeningInvalidNextPaymentBlock,
  50. /// Working group mint does not exist.
  51. FillOpeningMintDoesNotExist,
  52. ///Relationship must exist.
  53. RelationshipMustExist,
  54. /// Worker exit rationale text is too long.
  55. WorkerExitRationaleTextTooLong,
  56. /// Worker exit rationale text is too short.
  57. WorkerExitRationaleTextTooShort,
  58. /// Signer is not worker role account.
  59. SignerIsNotWorkerRoleAccount,
  60. /// Worker has no recurring reward.
  61. WorkerHasNoReward,
  62. /// Worker does not exist.
  63. WorkerDoesNotExist,
  64. /// Opening does not exist.
  65. AcceptWorkerApplicationsOpeningDoesNotExist,
  66. /// Opening Is Not in Waiting to begin.
  67. AcceptWorkerApplicationsOpeningIsNotWaitingToBegin,
  68. /// Opening does not exist.
  69. BeginWorkerApplicantReviewOpeningDoesNotExist,
  70. /// Opening Is Not in Waiting.
  71. BeginWorkerApplicantReviewOpeningOpeningIsNotWaitingToBegin,
  72. /// OpeningDoesNotExist.
  73. FullWorkerOpeningOpeningDoesNotExist,
  74. /// Opening not in review period stage.
  75. FullWorkerOpeningOpeningNotInReviewPeriodStage,
  76. /// Application stake unstaking period for successful applicants too short.
  77. FullWorkerOpeningUnsuccessfulApplicationStakeUnstakingPeriodTooShort,
  78. /// Application stake unstaking period for failed applicants too short.
  79. FullWorkerOpeningSuccessfulApplicationStakeUnstakingPeriodTooShort,
  80. /// Role stake unstaking period for successful applicants too short.
  81. FullWorkerOpeningSuccessfulRoleStakeUnstakingPeriodTooShort,
  82. /// Role stake unstaking period for failed applicants too short.
  83. FullWorkerOpeningUnsuccessfulRoleStakeUnstakingPeriodTooShort,
  84. /// Application stake unstaking period for successful applicants redundant.
  85. FullWorkerOpeningSuccessfulApplicationStakeUnstakingPeriodRedundant,
  86. /// Application stake unstaking period for failed applicants redundant.
  87. FullWorkerOpeningUnsuccessfulApplicationStakeUnstakingPeriodRedundant,
  88. /// Role stake unstaking period for successful applicants redundant.
  89. FullWorkerOpeningSuccessfulRoleStakeUnstakingPeriodRedundant,
  90. /// Role stake unstaking period for failed applicants redundant.
  91. FullWorkerOpeningUnsuccessfulRoleStakeUnstakingPeriodRedundant,
  92. /// Application does not exist.
  93. FullWorkerOpeningApplicationDoesNotExist,
  94. /// Application not in active stage.
  95. FullWorkerOpeningApplicationNotActive,
  96. /// Applications not for opening.
  97. FillWorkerOpeningApplicationForWrongOpening,
  98. /// Application does not exist.
  99. WithdrawWorkerApplicationApplicationDoesNotExist,
  100. /// Application is not active.
  101. WithdrawWorkerApplicationApplicationNotActive,
  102. /// Opening not accepting applications.
  103. WithdrawWorkerApplicationOpeningNotAcceptingApplications,
  104. /// UnstakingPeriodTooShort .... // <== SHOULD REALLY BE TWO SEPARATE, ONE FOR EACH STAKING PURPOSE
  105. WithdrawWorkerApplicationUnstakingPeriodTooShort,
  106. /// Redundant unstaking period provided
  107. WithdrawWorkerApplicationRedundantUnstakingPeriod,
  108. /// Opening does not activate in the future.
  109. AddWorkerOpeningActivatesInThePast,
  110. /// Role stake amount less than minimum currency balance.
  111. AddWorkerOpeningRoleStakeLessThanMinimum,
  112. /// Application stake amount less than minimum currency balance.
  113. AddWorkerOpeningAppliicationStakeLessThanMinimum,
  114. /// Opening does not exist.
  115. AddWorkerOpeningOpeningDoesNotExist,
  116. // <== SHOULD REALLY BE TWO SEPARATE, ONE FOR EACH STAKING PURPOSE
  117. /// Stake provided when redundant.
  118. AddWorkerOpeningStakeProvidedWhenRedundant,
  119. // <== SHOULD REALLY BE TWO SEPARATE, ONE FOR EACH STAKING PURPOSE
  120. /// Stake missing when required.
  121. AddWorkerOpeningStakeMissingWhenRequired,
  122. // <== SHOULD REALLY BE TWO SEPARATE, ONE FOR EACH STAKING PURPOSE
  123. /// Stake amount too low.
  124. AddWorkerOpeningStakeAmountTooLow,
  125. /// Opening is not in accepting applications stage.
  126. AddWorkerOpeningOpeningNotInAcceptingApplicationStage,
  127. /// New application was crowded out.
  128. AddWorkerOpeningNewApplicationWasCrowdedOut,
  129. /// Application rationing has zero max active applicants.
  130. AddWorkerOpeningZeroMaxApplicantCount,
  131. /// Next payment is not in the future.
  132. RecurringRewardsNextPaymentNotInFuture,
  133. /// Recipient not found.
  134. RecurringRewardsRecipientNotFound,
  135. /// Recipient reward source not found.
  136. RecurringRewardsRewardSourceNotFound,
  137. /// Reward relationship not found.
  138. RecurringRewardsRewardRelationshipNotFound,
  139. /// Stake not found.
  140. StakingErrorStakeNotFound,
  141. /// Unstaking period should be greater than zero.
  142. StakingErrorUnstakingPeriodShouldBeGreaterThanZero,
  143. /// Already unstaking.
  144. StakingErrorAlreadyUnstaking,
  145. /// Not staked.
  146. StakingErrorNotStaked,
  147. /// Cannot unstake while slashes ongoing.
  148. StakingErrorCannotUnstakeWhileSlashesOngoing,
  149. /// Insufficient balance in source account.
  150. StakingErrorInsufficientBalanceInSourceAccount,
  151. /// Cannot change stake by zero.
  152. StakingErrorCannotChangeStakeByZero,
  153. /// Cannot increase stake while unstaking.
  154. StakingErrorCannotIncreaseStakeWhileUnstaking,
  155. /// Cannot decrease stake while slashes ongoing.
  156. StakingErrorCannotDecreaseWhileSlashesOngoing,
  157. /// Insufficient stake to decrease.
  158. StakingErrorInsufficientStake,
  159. /// Slash amount should be greater than zero.
  160. StakingErrorSlashAmountShouldBeGreaterThanZero,
  161. /// Cannot find mint in the minting module.
  162. CannotFindMint,
  163. /// Require root origin in extrinsics.
  164. RequireRootOrigin,
  165. /// Require signed origin in extrinsics.
  166. RequireSignedOrigin,
  167. /// Working group size limit exceeded.
  168. MaxActiveWorkerNumberExceeded,
  169. /// Add worker opening role stake cannot be zero.
  170. AddWorkerOpeningRoleStakeCannotBeZero,
  171. /// Add worker opening application stake cannot be zero.
  172. AddWorkerOpeningApplicationStakeCannotBeZero,
  173. /// Invalid OpeningPolicyCommitment parameter:
  174. /// fill_opening_failed_applicant_application_stake_unstaking_period should be non-zero.
  175. FillOpeningFailedApplicantApplicationStakeUnstakingPeriodIsZero,
  176. /// Invalid OpeningPolicyCommitment parameter:
  177. /// fill_opening_failed_applicant_role_stake_unstaking_period should be non-zero.
  178. FillOpeningFailedApplicantRoleStakeUnstakingPeriodIsZero,
  179. /// Invalid OpeningPolicyCommitment parameter:
  180. /// fill_opening_successful_applicant_application_stake_unstaking_period should be non-zero.
  181. FillOpeningSuccessfulApplicantApplicationStakeUnstakingPeriodIsZero,
  182. /// Invalid OpeningPolicyCommitment parameter:
  183. /// exit_role_stake_unstaking_period should be non-zero.
  184. ExitRoleStakeUnstakingPeriodIsZero,
  185. /// Invalid OpeningPolicyCommitment parameter:
  186. /// exit_role_application_stake_unstaking_period should be non-zero.
  187. ExitRoleApplicationStakeUnstakingPeriodIsZero,
  188. /// Invalid OpeningPolicyCommitment parameter:
  189. /// terminate_role_stake_unstaking_period should be non-zero.
  190. TerminateRoleStakeUnstakingPeriodIsZero,
  191. /// Invalid OpeningPolicyCommitment parameter:
  192. /// terminate_application_stake_unstaking_period should be non-zero.
  193. TerminateApplicationStakeUnstakingPeriodIsZero,
  194. /// Invalid OpeningPolicyCommitment parameter (role_staking_policy):
  195. /// crowded_out_unstaking_period_length should be non-zero.
  196. RoleStakingPolicyCrowdedOutUnstakingPeriodIsZero,
  197. /// Invalid OpeningPolicyCommitment parameter (role_staking_policy):
  198. /// review_period_expired_unstaking_period_length should be non-zero.
  199. RoleStakingPolicyReviewPeriodUnstakingPeriodIsZero,
  200. /// Invalid OpeningPolicyCommitment parameter (application_staking_policy):
  201. /// crowded_out_unstaking_period_length should be non-zero.
  202. ApplicationStakingPolicyCrowdedOutUnstakingPeriodIsZero,
  203. /// Invalid OpeningPolicyCommitment parameter (application_staking_policy):
  204. /// review_period_expired_unstaking_period_length should be non-zero.
  205. ApplicationStakingPolicyReviewPeriodUnstakingPeriodIsZero,
  206. /// Invalid OpeningPolicyCommitment parameter (application_rationing_policy):
  207. /// max_active_applicants should be non-zero.
  208. ApplicationRationingPolicyMaxActiveApplicantsIsZero,
  209. }
  210. }
  211. impl From<system::Error> for Error {
  212. fn from(error: system::Error) -> Self {
  213. match error {
  214. system::Error::Other(msg) => Error::Other(msg),
  215. system::Error::RequireRootOrigin => Error::RequireRootOrigin,
  216. system::Error::RequireSignedOrigin => Error::RequireSignedOrigin,
  217. _ => Error::Other(error.into()),
  218. }
  219. }
  220. }
  221. /// Error wrapper for external module error conversions.
  222. pub struct WrappedError<E> {
  223. /// Generic error.
  224. pub error: E,
  225. }
  226. /// Helps with conversion of other modules errors.
  227. #[macro_export]
  228. macro_rules! ensure_on_wrapped_error {
  229. ($call:expr) => {{
  230. { $call }.map_err(|err| crate::WrappedError { error: err })
  231. }};
  232. }
  233. impl rstd::convert::From<WrappedError<hiring::BeginAcceptingApplicationsError>> for Error {
  234. fn from(wrapper: WrappedError<hiring::BeginAcceptingApplicationsError>) -> Self {
  235. match wrapper.error {
  236. hiring::BeginAcceptingApplicationsError::OpeningDoesNotExist => {
  237. Error::AcceptWorkerApplicationsOpeningDoesNotExist
  238. }
  239. hiring::BeginAcceptingApplicationsError::OpeningIsNotInWaitingToBeginStage => {
  240. Error::AcceptWorkerApplicationsOpeningIsNotWaitingToBegin
  241. }
  242. }
  243. }
  244. }
  245. impl rstd::convert::From<WrappedError<hiring::AddOpeningError>> for Error {
  246. fn from(wrapper: WrappedError<hiring::AddOpeningError>) -> Self {
  247. match wrapper.error {
  248. hiring::AddOpeningError::OpeningMustActivateInTheFuture => {
  249. Error::AddWorkerOpeningActivatesInThePast
  250. }
  251. hiring::AddOpeningError::StakeAmountLessThanMinimumStakeBalance(purpose) => {
  252. match purpose {
  253. hiring::StakePurpose::Role => Error::AddWorkerOpeningRoleStakeLessThanMinimum,
  254. hiring::StakePurpose::Application => {
  255. Error::AddWorkerOpeningAppliicationStakeLessThanMinimum
  256. }
  257. }
  258. }
  259. hiring::AddOpeningError::ApplicationRationingZeroMaxApplicants => {
  260. Error::AddWorkerOpeningZeroMaxApplicantCount
  261. }
  262. hiring::AddOpeningError::StakeAmountCannotBeZero(purpose) => match purpose {
  263. hiring::StakePurpose::Role => Error::AddWorkerOpeningRoleStakeCannotBeZero,
  264. hiring::StakePurpose::Application => {
  265. Error::AddWorkerOpeningApplicationStakeCannotBeZero
  266. }
  267. },
  268. }
  269. }
  270. }
  271. impl rstd::convert::From<WrappedError<hiring::BeginReviewError>> for Error {
  272. fn from(wrapper: WrappedError<hiring::BeginReviewError>) -> Self {
  273. match wrapper.error {
  274. hiring::BeginReviewError::OpeningDoesNotExist => {
  275. Error::BeginWorkerApplicantReviewOpeningDoesNotExist
  276. }
  277. hiring::BeginReviewError::OpeningNotInAcceptingApplicationsStage => {
  278. Error::BeginWorkerApplicantReviewOpeningOpeningIsNotWaitingToBegin
  279. }
  280. }
  281. }
  282. }
  283. impl<T: hiring::Trait> rstd::convert::From<WrappedError<hiring::FillOpeningError<T>>> for Error {
  284. fn from(wrapper: WrappedError<hiring::FillOpeningError<T>>) -> Self {
  285. match wrapper.error {
  286. hiring::FillOpeningError::<T>::OpeningDoesNotExist => {
  287. Error::FullWorkerOpeningOpeningDoesNotExist
  288. }
  289. hiring::FillOpeningError::<T>::OpeningNotInReviewPeriodStage => {
  290. Error::FullWorkerOpeningOpeningNotInReviewPeriodStage
  291. }
  292. hiring::FillOpeningError::<T>::UnstakingPeriodTooShort(
  293. stake_purpose,
  294. outcome_in_filled_opening,
  295. ) => match stake_purpose {
  296. hiring::StakePurpose::Application => match outcome_in_filled_opening {
  297. hiring::ApplicationOutcomeInFilledOpening::Success => {
  298. Error::FullWorkerOpeningSuccessfulApplicationStakeUnstakingPeriodTooShort
  299. }
  300. hiring::ApplicationOutcomeInFilledOpening::Failure => {
  301. Error::FullWorkerOpeningUnsuccessfulApplicationStakeUnstakingPeriodTooShort
  302. }
  303. },
  304. hiring::StakePurpose::Role => match outcome_in_filled_opening {
  305. hiring::ApplicationOutcomeInFilledOpening::Success => {
  306. Error::FullWorkerOpeningSuccessfulRoleStakeUnstakingPeriodTooShort
  307. }
  308. hiring::ApplicationOutcomeInFilledOpening::Failure => {
  309. Error::FullWorkerOpeningUnsuccessfulRoleStakeUnstakingPeriodTooShort
  310. }
  311. },
  312. },
  313. hiring::FillOpeningError::<T>::RedundantUnstakingPeriodProvided(
  314. stake_purpose,
  315. outcome_in_filled_opening,
  316. ) => match stake_purpose {
  317. hiring::StakePurpose::Application => match outcome_in_filled_opening {
  318. hiring::ApplicationOutcomeInFilledOpening::Success => {
  319. Error::FullWorkerOpeningSuccessfulApplicationStakeUnstakingPeriodRedundant
  320. }
  321. hiring::ApplicationOutcomeInFilledOpening::Failure => {
  322. Error::FullWorkerOpeningUnsuccessfulApplicationStakeUnstakingPeriodRedundant
  323. }
  324. },
  325. hiring::StakePurpose::Role => match outcome_in_filled_opening {
  326. hiring::ApplicationOutcomeInFilledOpening::Success => {
  327. Error::FullWorkerOpeningSuccessfulRoleStakeUnstakingPeriodRedundant
  328. }
  329. hiring::ApplicationOutcomeInFilledOpening::Failure => {
  330. Error::FullWorkerOpeningUnsuccessfulRoleStakeUnstakingPeriodRedundant
  331. }
  332. },
  333. },
  334. hiring::FillOpeningError::<T>::ApplicationDoesNotExist(_application_id) => {
  335. Error::FullWorkerOpeningApplicationDoesNotExist
  336. }
  337. hiring::FillOpeningError::<T>::ApplicationNotInActiveStage(_application_id) => {
  338. Error::FullWorkerOpeningApplicationNotActive
  339. }
  340. hiring::FillOpeningError::<T>::ApplicationForWrongOpening(_application_id) => {
  341. Error::FillWorkerOpeningApplicationForWrongOpening
  342. }
  343. }
  344. }
  345. }
  346. impl rstd::convert::From<WrappedError<hiring::DeactivateApplicationError>> for Error {
  347. fn from(wrapper: WrappedError<hiring::DeactivateApplicationError>) -> Self {
  348. match wrapper.error {
  349. hiring::DeactivateApplicationError::ApplicationDoesNotExist => {
  350. Error::WithdrawWorkerApplicationApplicationDoesNotExist
  351. }
  352. hiring::DeactivateApplicationError::ApplicationNotActive => {
  353. Error::WithdrawWorkerApplicationApplicationNotActive
  354. }
  355. hiring::DeactivateApplicationError::OpeningNotAcceptingApplications => {
  356. Error::WithdrawWorkerApplicationOpeningNotAcceptingApplications
  357. }
  358. hiring::DeactivateApplicationError::UnstakingPeriodTooShort(_stake_purpose) => {
  359. Error::WithdrawWorkerApplicationUnstakingPeriodTooShort
  360. }
  361. hiring::DeactivateApplicationError::RedundantUnstakingPeriodProvided(
  362. _stake_purpose,
  363. ) => Error::WithdrawWorkerApplicationRedundantUnstakingPeriod,
  364. }
  365. }
  366. }
  367. impl rstd::convert::From<WrappedError<hiring::AddApplicationError>> for Error {
  368. fn from(wrapper: WrappedError<hiring::AddApplicationError>) -> Self {
  369. match wrapper.error {
  370. hiring::AddApplicationError::OpeningDoesNotExist => {
  371. Error::AddWorkerOpeningOpeningDoesNotExist
  372. }
  373. hiring::AddApplicationError::StakeProvidedWhenRedundant(_stake_purpose) => {
  374. Error::AddWorkerOpeningStakeProvidedWhenRedundant
  375. }
  376. hiring::AddApplicationError::StakeMissingWhenRequired(_stake_purpose) => {
  377. Error::AddWorkerOpeningStakeMissingWhenRequired
  378. }
  379. hiring::AddApplicationError::StakeAmountTooLow(_stake_purpose) => {
  380. Error::AddWorkerOpeningStakeAmountTooLow
  381. }
  382. hiring::AddApplicationError::OpeningNotInAcceptingApplicationsStage => {
  383. Error::AddWorkerOpeningOpeningNotInAcceptingApplicationStage
  384. }
  385. hiring::AddApplicationError::NewApplicationWasCrowdedOut => {
  386. Error::AddWorkerOpeningNewApplicationWasCrowdedOut
  387. }
  388. }
  389. }
  390. }
  391. impl rstd::convert::From<WrappedError<members::MemberControllerAccountDidNotSign>> for Error {
  392. fn from(wrapper: WrappedError<members::MemberControllerAccountDidNotSign>) -> Self {
  393. match wrapper.error {
  394. members::MemberControllerAccountDidNotSign::UnsignedOrigin => {
  395. Error::MembershipUnsignedOrigin
  396. }
  397. members::MemberControllerAccountDidNotSign::MemberIdInvalid => {
  398. Error::MembershipInvalidMemberId
  399. }
  400. members::MemberControllerAccountDidNotSign::SignerControllerAccountMismatch => {
  401. Error::ApplyOnWorkerOpeningSignerNotControllerAccount
  402. }
  403. }
  404. }
  405. }
  406. impl rstd::convert::From<WrappedError<recurringrewards::RewardsError>> for Error {
  407. fn from(wrapper: WrappedError<recurringrewards::RewardsError>) -> Self {
  408. match wrapper.error {
  409. recurringrewards::RewardsError::NextPaymentNotInFuture => {
  410. Error::RecurringRewardsNextPaymentNotInFuture
  411. }
  412. recurringrewards::RewardsError::RecipientNotFound => {
  413. Error::RecurringRewardsRecipientNotFound
  414. }
  415. recurringrewards::RewardsError::RewardSourceNotFound => {
  416. Error::RecurringRewardsRewardSourceNotFound
  417. }
  418. recurringrewards::RewardsError::RewardRelationshipNotFound => {
  419. Error::RecurringRewardsRewardRelationshipNotFound
  420. }
  421. }
  422. }
  423. }
  424. impl rstd::convert::From<WrappedError<stake::StakeActionError<stake::InitiateUnstakingError>>>
  425. for Error
  426. {
  427. fn from(wrapper: WrappedError<stake::StakeActionError<stake::InitiateUnstakingError>>) -> Self {
  428. match wrapper.error {
  429. stake::StakeActionError::StakeNotFound => Error::StakingErrorStakeNotFound,
  430. stake::StakeActionError::Error(initiate_unstaking_error) => {
  431. match initiate_unstaking_error {
  432. stake::InitiateUnstakingError::UnstakingPeriodShouldBeGreaterThanZero => {
  433. Error::StakingErrorUnstakingPeriodShouldBeGreaterThanZero
  434. }
  435. stake::InitiateUnstakingError::UnstakingError(unstaking_error) => {
  436. match unstaking_error {
  437. stake::UnstakingError::AlreadyUnstaking => {
  438. Error::StakingErrorAlreadyUnstaking
  439. }
  440. stake::UnstakingError::NotStaked => Error::StakingErrorNotStaked,
  441. stake::UnstakingError::CannotUnstakeWhileSlashesOngoing => {
  442. Error::StakingErrorCannotUnstakeWhileSlashesOngoing
  443. }
  444. }
  445. }
  446. }
  447. }
  448. }
  449. }
  450. }
  451. impl
  452. rstd::convert::From<
  453. WrappedError<stake::StakeActionError<stake::IncreasingStakeFromAccountError>>,
  454. > for Error
  455. {
  456. fn from(
  457. wrapper: WrappedError<stake::StakeActionError<stake::IncreasingStakeFromAccountError>>,
  458. ) -> Self {
  459. match wrapper.error {
  460. stake::StakeActionError::StakeNotFound => Error::StakingErrorStakeNotFound,
  461. stake::StakeActionError::Error(increase_stake_error_from_account) => {
  462. match increase_stake_error_from_account {
  463. stake::IncreasingStakeFromAccountError::InsufficientBalanceInSourceAccount => {
  464. Error::StakingErrorInsufficientBalanceInSourceAccount
  465. }
  466. stake::IncreasingStakeFromAccountError::IncreasingStakeError(
  467. increasing_stake_error,
  468. ) => match increasing_stake_error {
  469. stake::IncreasingStakeError::NotStaked => Error::StakingErrorNotStaked,
  470. stake::IncreasingStakeError::CannotChangeStakeByZero => {
  471. Error::StakingErrorCannotChangeStakeByZero
  472. }
  473. stake::IncreasingStakeError::CannotIncreaseStakeWhileUnstaking => {
  474. Error::StakingErrorCannotIncreaseStakeWhileUnstaking
  475. }
  476. },
  477. }
  478. }
  479. }
  480. }
  481. }
  482. impl rstd::convert::From<WrappedError<stake::StakeActionError<stake::IncreasingStakeError>>>
  483. for Error
  484. {
  485. fn from(wrapper: WrappedError<stake::StakeActionError<stake::IncreasingStakeError>>) -> Self {
  486. match wrapper.error {
  487. stake::StakeActionError::StakeNotFound => Error::StakingErrorStakeNotFound,
  488. stake::StakeActionError::Error(increasing_stake_error) => {
  489. match increasing_stake_error {
  490. stake::IncreasingStakeError::NotStaked => Error::StakingErrorNotStaked,
  491. stake::IncreasingStakeError::CannotChangeStakeByZero => {
  492. Error::StakingErrorCannotChangeStakeByZero
  493. }
  494. stake::IncreasingStakeError::CannotIncreaseStakeWhileUnstaking => {
  495. Error::StakingErrorCannotIncreaseStakeWhileUnstaking
  496. }
  497. }
  498. }
  499. }
  500. }
  501. }
  502. impl rstd::convert::From<WrappedError<stake::StakeActionError<stake::DecreasingStakeError>>>
  503. for Error
  504. {
  505. fn from(wrapper: WrappedError<stake::StakeActionError<stake::DecreasingStakeError>>) -> Self {
  506. match wrapper.error {
  507. stake::StakeActionError::StakeNotFound => Error::StakingErrorStakeNotFound,
  508. stake::StakeActionError::Error(decreasing_stake_error) => {
  509. match decreasing_stake_error {
  510. stake::DecreasingStakeError::NotStaked => Error::StakingErrorNotStaked,
  511. stake::DecreasingStakeError::CannotChangeStakeByZero => {
  512. Error::StakingErrorCannotChangeStakeByZero
  513. }
  514. stake::DecreasingStakeError::CannotDecreaseStakeWhileUnstaking => {
  515. Error::StakingErrorCannotIncreaseStakeWhileUnstaking
  516. }
  517. stake::DecreasingStakeError::CannotDecreaseStakeWhileOngoingSlahes => {
  518. Error::StakingErrorCannotDecreaseWhileSlashesOngoing
  519. }
  520. stake::DecreasingStakeError::InsufficientStake => {
  521. Error::StakingErrorInsufficientStake
  522. }
  523. }
  524. }
  525. }
  526. }
  527. }
  528. impl rstd::convert::From<WrappedError<stake::StakeActionError<stake::ImmediateSlashingError>>>
  529. for Error
  530. {
  531. fn from(wrapper: WrappedError<stake::StakeActionError<stake::ImmediateSlashingError>>) -> Self {
  532. match wrapper.error {
  533. stake::StakeActionError::StakeNotFound => Error::StakingErrorStakeNotFound,
  534. stake::StakeActionError::Error(slashing_error) => match slashing_error {
  535. stake::ImmediateSlashingError::NotStaked => Error::StakingErrorNotStaked,
  536. stake::ImmediateSlashingError::SlashAmountShouldBeGreaterThanZero => {
  537. Error::StakingErrorSlashAmountShouldBeGreaterThanZero
  538. }
  539. },
  540. }
  541. }
  542. }
  543. impl rstd::convert::From<WrappedError<minting::GeneralError>> for Error {
  544. fn from(wrapper: WrappedError<minting::GeneralError>) -> Self {
  545. match wrapper.error {
  546. minting::GeneralError::MintNotFound => Error::CannotFindMint,
  547. minting::GeneralError::NextAdjustmentInPast => Error::Other("NextAdjustmentInPast"),
  548. }
  549. }
  550. }