easy_sql/traits/
insert.rs1use anyhow::Context;
2use easy_macros::always_context;
3
4use crate::traits::{Driver, DriverArguments};
5
6#[always_context]
7pub trait Insert<'a, Table, D: Driver> {
12 fn insert_columns() -> Vec<String>;
13
14 fn insert_values(
16 self,
17 args_list: DriverArguments<'a, D>,
18 ) -> anyhow::Result<(DriverArguments<'a, D>, usize)>;
19}
20
21#[always_context]
22impl<'a, Table, T: Insert<'a, Table, D>, D: Driver> Insert<'a, Table, D> for Vec<T> {
23 fn insert_columns() -> Vec<String> {
24 T::insert_columns()
25 }
26
27 fn insert_values(
28 self,
29 args_list: DriverArguments<'a, D>,
30 ) -> anyhow::Result<(DriverArguments<'a, D>, usize)> {
31 let mut args = args_list;
32 let mut item_count = 0;
33 for item in self.into_iter() {
34 let (new_args, new_count) = item.insert_values(
35 #[context(no)]
36 args,
37 )?;
38 args = new_args;
39 item_count += new_count;
40 }
41 Ok((args, item_count))
42 }
43}
44
45#[always_context]
46impl<'a, Table, T: Insert<'a, Table, D>, D: Driver> Insert<'a, Table, D> for &'a Vec<T>
47where
48 &'a T: Insert<'a, Table, D>,
49{
50 fn insert_columns() -> Vec<String> {
51 T::insert_columns()
52 }
53
54 fn insert_values(
55 self,
56 args_list: DriverArguments<'a, D>,
57 ) -> anyhow::Result<(DriverArguments<'a, D>, usize)> {
58 let mut args = args_list;
59 let mut item_count = 0;
60 for item in self.iter() {
61 let (new_args, new_count) = item.insert_values(
62 #[context(no)]
63 args,
64 )?;
65 args = new_args;
66 item_count += new_count;
67 }
68 Ok((args, item_count))
69 }
70}
71
72#[always_context]
73impl<'a, Table, T: Insert<'a, Table, D>, D: Driver> Insert<'a, Table, D> for &'a [T]
74where
75 &'a T: Insert<'a, Table, D>,
76{
77 fn insert_columns() -> Vec<String> {
78 T::insert_columns()
79 }
80
81 fn insert_values(
82 self,
83 args_list: DriverArguments<'a, D>,
84 ) -> anyhow::Result<(DriverArguments<'a, D>, usize)> {
85 let mut args = args_list;
86 let mut item_count = 0;
87 for item in self.iter() {
88 let (new_args, new_count) = item.insert_values(
89 #[context(no)]
90 args,
91 )?;
92 args = new_args;
93 item_count += new_count;
94 }
95 Ok((args, item_count))
96 }
97}