addressbook.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #include "pbc.h"
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <stdint.h>
  5. #include <stddef.h>
  6. #include "readfile.h"
  7. static void
  8. dump(uint8_t *buffer, int sz) {
  9. int i , j;
  10. for (i=0;i<sz;i++) {
  11. printf("%02X ",buffer[i]);
  12. if (i % 16 == 15) {
  13. for (j = 0 ;j <16 ;j++) {
  14. char c = buffer[i/16 * 16+j];
  15. if (c>=32 && c<127) {
  16. printf("%c",c);
  17. } else {
  18. printf(".");
  19. }
  20. }
  21. printf("\n");
  22. }
  23. }
  24. printf("\n");
  25. }
  26. static void
  27. test_rmessage(struct pbc_env *env, struct pbc_slice *slice) {
  28. struct pbc_rmessage * m = pbc_rmessage_new(env, "tutorial.Person", slice);
  29. if (m==NULL) {
  30. printf("Error : %s",pbc_error(env));
  31. return;
  32. }
  33. printf("name = %s\n", pbc_rmessage_string(m , "name" , 0 , NULL));
  34. printf("id = %d\n", pbc_rmessage_integer(m , "id" , 0 , NULL));
  35. printf("email = %s\n", pbc_rmessage_string(m , "email" , 0 , NULL));
  36. int phone_n = pbc_rmessage_size(m, "phone");
  37. int i;
  38. const char * field_name;
  39. pbc_type(env, "tutorial.Person", "phone", &field_name);
  40. printf("phone type [%s]\n",field_name);
  41. for (i=0;i<phone_n;i++) {
  42. struct pbc_rmessage * p = pbc_rmessage_message(m , "phone", i);
  43. printf("\tnumber[%d] = %s\n",i,pbc_rmessage_string(p , "number", i ,NULL));
  44. printf("\ttype[%d] = %s\n",i,pbc_rmessage_string(p, "type", i, NULL));
  45. }
  46. int n = pbc_rmessage_size(m , "test");
  47. for (i=0;i<n;i++) {
  48. printf("test[%d] = %d\n",i, pbc_rmessage_integer(m , "test" , i , NULL));
  49. }
  50. printf("tutorial.Ext.test = %d\n", pbc_rmessage_integer(m,"tutorial.Ext.test",0,NULL));
  51. pbc_rmessage_delete(m);
  52. }
  53. static struct pbc_wmessage *
  54. test_wmessage(struct pbc_env * env)
  55. {
  56. struct pbc_wmessage * msg = pbc_wmessage_new(env, "tutorial.Person");
  57. pbc_wmessage_string(msg, "name", "Alice", -1);
  58. pbc_wmessage_integer(msg, "id" , 12345, 0);
  59. pbc_wmessage_string(msg, "email", "alice@unkown", -1);
  60. struct pbc_wmessage * phone = pbc_wmessage_message(msg , "phone");
  61. pbc_wmessage_string(phone , "number", "87654321" , -1);
  62. phone = pbc_wmessage_message(msg , "phone");
  63. pbc_wmessage_string(phone , "number", "13901234567" , -1);
  64. pbc_wmessage_string(phone , "type" , "MOBILE" , -1);
  65. pbc_wmessage_integer(msg, "test", -123,0);
  66. pbc_wmessage_integer(msg, "test", 12345,0);
  67. pbc_wmessage_integer(msg, "test", 1234567,0);
  68. pbc_wmessage_integer(msg, "tutorial.Ext.test", 54321 , 0);
  69. return msg;
  70. }
  71. int
  72. main()
  73. {
  74. struct pbc_slice slice;
  75. read_file("addressbook.pb", &slice);
  76. if (slice.buffer == NULL)
  77. return 1;
  78. struct pbc_env * env = pbc_new();
  79. int r = pbc_register(env, &slice);
  80. if (r) {
  81. printf("Error : %s", pbc_error(env));
  82. return 1;
  83. }
  84. free(slice.buffer);
  85. struct pbc_wmessage *msg = test_wmessage(env);
  86. pbc_wmessage_buffer(msg, &slice);
  87. dump(slice.buffer, slice.len);
  88. test_rmessage(env, &slice);
  89. pbc_wmessage_delete(msg);
  90. pbc_delete(env);
  91. return 0;
  92. }