(&self, log: &Log, py: Python)
| 82 | |
| 83 | impl Decoder { |
| 84 | fn decode_impl(&self, log: &Log, py: Python) -> Result<Option<DecodedEvent>> { |
| 85 | let topics = log |
| 86 | .topics |
| 87 | .iter() |
| 88 | .map(|v| { |
| 89 | v.as_ref() |
| 90 | .map(|v| LogArgument::decode_hex(v).context("decode topic")) |
| 91 | .transpose() |
| 92 | }) |
| 93 | .collect::<Result<Vec<_>>>() |
| 94 | .context("decode topics")?; |
| 95 | |
| 96 | let topic0 = topics |
| 97 | .first() |
| 98 | .context("get topic0")? |
| 99 | .as_ref() |
| 100 | .context("topic0 is null")?; |
| 101 | |
| 102 | let data = log.data.as_ref().context("get log.data")?; |
| 103 | let data = Data::decode_hex(data).context("decode data")?; |
| 104 | |
| 105 | let decoded = match self |
| 106 | .inner |
| 107 | .decode(topic0.as_slice(), &topics, &data) |
| 108 | .context("decode log")? |
| 109 | { |
| 110 | Some(v) => v, |
| 111 | None => return Ok(None), |
| 112 | }; |
| 113 | |
| 114 | Ok(Some(DecodedEvent { |
| 115 | indexed: decoded |
| 116 | .indexed |
| 117 | .into_iter() |
| 118 | .map(|v| DecodedSolValue::new(py, v, self.checksummed_addresses)) |
| 119 | .collect(), |
| 120 | body: decoded |
| 121 | .body |
| 122 | .into_iter() |
| 123 | .map(|v| DecodedSolValue::new(py, v, self.checksummed_addresses)) |
| 124 | .collect(), |
| 125 | })) |
| 126 | } |
| 127 | } |
| 128 | |
| 129 | #[pyfunction] |
no test coverage detected