Shorted MQTT publishing code
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				continuous-integration/drone/push Build is passing
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	continuous-integration/drone/push Build is passing
				
			This commit is contained in:
		
							parent
							
								
									cc88083b19
								
							
						
					
					
						commit
						742a00892d
					
				| @ -125,34 +125,34 @@ impl MqttInterface { | ||||
|         (Self { client, topics }, event_loop) | ||||
|     } | ||||
| 
 | ||||
|     async fn publish_connected(&mut self, connected: bool) -> eyre::Result<()> { | ||||
|     async fn publish_data<P>(&mut self, topic: String, payload: &P) -> eyre::Result<()> | ||||
|     where | ||||
|         P: serde::Serialize, | ||||
|     { | ||||
|         let payload_vec = | ||||
|             serde_json::to_vec(payload).wrap_err("failed to serialize publish payload")?; | ||||
|         self.client | ||||
|             .publish( | ||||
|                 self.topics.connected(), | ||||
|                 QoS::AtLeastOnce, | ||||
|                 true, | ||||
|                 connected.to_string(), | ||||
|             ) | ||||
|             .publish(topic, QoS::AtLeastOnce, true, payload_vec) | ||||
|             .await | ||||
|             .wrap_err("failed to publish connected topic")?; | ||||
|             .wrap_err("failed to publish")?; | ||||
|         Ok(()) | ||||
|     } | ||||
| 
 | ||||
|     async fn publish_connected(&mut self, connected: bool) -> eyre::Result<()> { | ||||
|         self.publish_data(self.topics.connected(), &connected) | ||||
|             .await | ||||
|             .wrap_err("failed to publish connected topic") | ||||
|     } | ||||
| 
 | ||||
|     async fn cancel(&mut self) -> Result<(), rumqttc::ClientError> { | ||||
|         self.client.cancel().await | ||||
|     } | ||||
| 
 | ||||
|     pub async fn publish_sections(&mut self, sections: &Sections) -> eyre::Result<()> { | ||||
|         let section_ids: Vec<_> = sections.keys().cloned().collect(); | ||||
|         let section_ids_payload = serde_json::to_vec(§ion_ids)?; | ||||
|         self.client | ||||
|             .publish( | ||||
|                 self.topics.sections(), | ||||
|                 QoS::AtLeastOnce, | ||||
|                 true, | ||||
|                 section_ids_payload, | ||||
|             ) | ||||
|             .await?; | ||||
|         self.publish_data(self.topics.sections(), §ion_ids) | ||||
|             .await | ||||
|             .wrap_err("failed to publish section ids")?; | ||||
|         for section in sections.values() { | ||||
|             self.publish_section(section).await?; | ||||
|         } | ||||
| @ -160,16 +160,9 @@ impl MqttInterface { | ||||
|     } | ||||
| 
 | ||||
|     pub async fn publish_section(&mut self, section: &Section) -> eyre::Result<()> { | ||||
|         let payload = serde_json::to_vec(section).wrap_err("failed to serialize section")?; | ||||
|         self.client | ||||
|             .publish( | ||||
|                 self.topics.section_data(section.id), | ||||
|                 QoS::AtLeastOnce, | ||||
|                 true, | ||||
|                 payload, | ||||
|             ) | ||||
|             .await?; | ||||
|         Ok(()) | ||||
|         self.publish_data(self.topics.section_data(section.id), section) | ||||
|             .await | ||||
|             .wrap_err("failed to publish section") | ||||
|     } | ||||
| 
 | ||||
|     pub async fn publish_section_state( | ||||
| @ -177,29 +170,16 @@ impl MqttInterface { | ||||
|         section_id: SectionId, | ||||
|         state: bool, | ||||
|     ) -> eyre::Result<()> { | ||||
|         let payload: Vec<u8> = state.to_string().into(); | ||||
|         self.client | ||||
|             .publish( | ||||
|                 self.topics.section_state(section_id), | ||||
|                 QoS::AtLeastOnce, | ||||
|                 true, | ||||
|                 payload, | ||||
|             ) | ||||
|             .await?; | ||||
|         Ok(()) | ||||
|         self.publish_data(self.topics.section_state(section_id), &state) | ||||
|             .await | ||||
|             .wrap_err("failed to publish section state") | ||||
|     } | ||||
| 
 | ||||
|     pub async fn publish_programs(&mut self, programs: &Programs) -> eyre::Result<()> { | ||||
|         let program_ids: Vec<_> = programs.keys().cloned().collect(); | ||||
|         let program_ids_payload = serde_json::to_vec(&program_ids)?; | ||||
|         self.client | ||||
|             .publish( | ||||
|                 self.topics.programs(), | ||||
|                 QoS::AtLeastOnce, | ||||
|                 true, | ||||
|                 program_ids_payload, | ||||
|             ) | ||||
|             .await?; | ||||
|         self.publish_data(self.topics.programs(), &program_ids) | ||||
|             .await | ||||
|             .wrap_err("failed to publish program ids")?; | ||||
|         for program in programs.values() { | ||||
|             self.publish_program(program).await?; | ||||
|         } | ||||
| @ -207,16 +187,9 @@ impl MqttInterface { | ||||
|     } | ||||
| 
 | ||||
|     pub async fn publish_program(&mut self, program: &Program) -> eyre::Result<()> { | ||||
|         let payload = serde_json::to_vec(program).wrap_err("failed to serialize program")?; | ||||
|         self.client | ||||
|             .publish( | ||||
|                 self.topics.program_data(program.id), | ||||
|                 QoS::AtLeastOnce, | ||||
|                 true, | ||||
|                 payload, | ||||
|             ) | ||||
|             .await?; | ||||
|         Ok(()) | ||||
|         self.publish_data(self.topics.program_data(program.id), &program) | ||||
|             .await | ||||
|             .wrap_err("failed to publish program") | ||||
|     } | ||||
| 
 | ||||
|     pub async fn publish_program_running( | ||||
| @ -224,16 +197,9 @@ impl MqttInterface { | ||||
|         program_id: ProgramId, | ||||
|         running: bool, | ||||
|     ) -> eyre::Result<()> { | ||||
|         let payload = running.to_string(); | ||||
|         self.client | ||||
|             .publish( | ||||
|                 self.topics.program_running(program_id), | ||||
|                 QoS::AtLeastOnce, | ||||
|                 true, | ||||
|                 payload, | ||||
|             ) | ||||
|             .await?; | ||||
|         Ok(()) | ||||
|         self.publish_data(self.topics.program_running(program_id), &running) | ||||
|             .await | ||||
|             .wrap_err("failed to publish program running") | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user